diff options
Diffstat (limited to 'src/components/utils/src/conditional_variable_boost.cc')
-rw-r--r-- | src/components/utils/src/conditional_variable_boost.cc | 87 |
1 files changed, 34 insertions, 53 deletions
diff --git a/src/components/utils/src/conditional_variable_boost.cc b/src/components/utils/src/conditional_variable_boost.cc index f1c23c13a4..c07b8284ea 100644 --- a/src/components/utils/src/conditional_variable_boost.cc +++ b/src/components/utils/src/conditional_variable_boost.cc @@ -64,29 +64,18 @@ bool ConditionalVariable::Wait(BaseLock& lock) { // superclass lock.AssertTakenAndMarkFree(); - try { - // What kind of lock are we ? - if (Lock* test_lock = dynamic_cast<Lock*>(&lock)) { - // Regular lock - cond_var_.wait<boost::mutex>(test_lock->mutex_); - } else if (RecursiveLock* test_rec_lock = - dynamic_cast<RecursiveLock*>(&lock)) { - // Recursive lock - cond_var_.wait<boost::recursive_mutex>(test_rec_lock->mutex_); - } else { - // unknown - lock.AssertFreeAndMarkTaken(); - - LOG4CXX_ERROR(logger_, "Unknown lock type!"); - return false; - } - } catch (std::exception err) { - lock.AssertFreeAndMarkTaken(); - - LOG4CXX_ERROR( - logger_, - "Failed to wait for conditional variable, exception:" << err.what()); - return false; + // What kind of lock are we ? + if (Lock* test_lock = dynamic_cast<Lock*>(&lock)) { + // Regular lock + cond_var_.wait<boost::mutex>(test_lock->mutex_); + } else if (RecursiveLock* test_rec_lock = + dynamic_cast<RecursiveLock*>(&lock)) { + // Recursive lock + cond_var_.wait<boost::recursive_mutex>(test_rec_lock->mutex_); + } else { + // unknown, give up the lock + LOG4CXX_ERROR(logger_, "Unknown lock type!"); + NOTREACHED(); } lock.AssertFreeAndMarkTaken(); @@ -104,36 +93,28 @@ ConditionalVariable::WaitStatus ConditionalVariable::WaitFor( WaitStatus wait_status = kNoTimeout; lock.AssertTakenAndMarkFree(); - try { - bool timeout = true; - - // What kind of lock are we ? - if (Lock* test_lock = dynamic_cast<Lock*>(&lock)) { - // Regular lock - // cond_var_.wait<boost::mutex>(test_lock->mutex_); - timeout = cond_var_.timed_wait<boost::mutex>( - test_lock->mutex_, boost::posix_time::milliseconds(milliseconds)); - } else if (RecursiveLock* test_rec_lock = - dynamic_cast<RecursiveLock*>(&lock)) { - // Recursive lock - // cond_var_.wait<boost::recursive_mutex>(test_rec_lock->mutex_); - timeout = cond_var_.timed_wait<boost::recursive_mutex>( - test_rec_lock->mutex_, boost::posix_time::milliseconds(milliseconds)); - } else { - // unknown - LOG4CXX_ERROR(logger_, "Unknown lock type!"); - } - - if (!timeout) { - wait_status = kTimeout; - } - } catch (boost::thread_interrupted inter) { - wait_status = kNoTimeout; - } catch (std::exception err) { - LOG4CXX_ERROR( - logger_, - "Failed to timewait for conditional variable timedwait_status: " - << err.what()); + bool timeout = true; + + // What kind of lock are we ? + if (Lock* test_lock = dynamic_cast<Lock*>(&lock)) { + // Regular lock + // cond_var_.wait<boost::mutex>(test_lock->mutex_); + timeout = cond_var_.timed_wait<boost::mutex>( + test_lock->mutex_, boost::posix_time::milliseconds(milliseconds)); + } else if (RecursiveLock* test_rec_lock = + dynamic_cast<RecursiveLock*>(&lock)) { + // Recursive lock + // cond_var_.wait<boost::recursive_mutex>(test_rec_lock->mutex_); + timeout = cond_var_.timed_wait<boost::recursive_mutex>( + test_rec_lock->mutex_, boost::posix_time::milliseconds(milliseconds)); + } else { + // this is an unknown lock, we have an issue + LOG4CXX_ERROR(logger_, "Unknown lock type!"); + NOTREACHED(); + } + + if (!timeout) { + wait_status = kTimeout; } lock.AssertFreeAndMarkTaken(); |