diff options
author | gnieboer <gnieboer@corpcomm.net> | 2017-06-13 21:04:04 -0400 |
---|---|---|
committer | gnieboer <gnieboer@corpcomm.net> | 2017-06-13 21:04:04 -0400 |
commit | 97d58215308e58d6756ec2a88d7020be601a3e69 (patch) | |
tree | abac095569350ab427e3a46794d616c2e7bddf35 /gr-fft | |
parent | 38a146d4b6238a161ce8567ab62467ced79d0571 (diff) |
gr-fft: Reuses file_lock object to prevent deadlocking on win32
Diffstat (limited to 'gr-fft')
-rw-r--r-- | gr-fft/lib/fft.cc | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/gr-fft/lib/fft.cc b/gr-fft/lib/fft.cc index 37390a69bb..3b6d05c383 100644 --- a/gr-fft/lib/fft.cc +++ b/gr-fft/lib/fft.cc @@ -56,6 +56,7 @@ namespace fs = boost::filesystem; namespace gr { namespace fft { static boost::mutex wisdom_thread_mutex; + boost::interprocess::file_lock wisdom_lock; gr_complex * malloc_complex(int size) @@ -100,23 +101,13 @@ namespace gr { static void lock_wisdom() { - const std::string wisdom_lock_file = wisdom_filename() + ".lock"; - int fd = open(wisdom_lock_file.c_str(), - O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, - 0666); - if (fd < 0){ - throw std::exception(); - } - boost::interprocess::file_lock wisdom_lock(wisdom_lock_file.c_str()); - wisdom_lock.lock(); - wisdom_thread_mutex.lock(); + wisdom_thread_mutex.lock(); + wisdom_lock.lock(); } static void unlock_wisdom() { - const std::string wisdom_lock_file = wisdom_filename() + ".lock"; - boost::interprocess::file_lock wisdom_lock(wisdom_lock_file.c_str()); wisdom_lock.unlock(); wisdom_thread_mutex.unlock(); } @@ -172,6 +163,15 @@ namespace gr { { // Hold global mutex during plan construction and destruction. planner::scoped_lock lock(planner::mutex()); + const std::string wisdom_lock_file = wisdom_filename() + ".lock"; + int fd = open(wisdom_lock_file.c_str(), + O_WRONLY | O_CREAT | O_NOCTTY | O_NONBLOCK, + 0666); + if (fd < 0) { + throw std::exception(); + } + close(fd); + wisdom_lock = boost::interprocess::file_lock(wisdom_lock_file.c_str()); assert (sizeof (fftwf_complex) == sizeof (gr_complex)); |