diff options
Diffstat (limited to 'src/components/utils')
-rw-r--r-- | src/components/utils/src/conditional_variable_boost.cc | 87 | ||||
-rw-r--r-- | src/components/utils/src/semantic_version.cc | 3 |
2 files changed, 51 insertions, 39 deletions
diff --git a/src/components/utils/src/conditional_variable_boost.cc b/src/components/utils/src/conditional_variable_boost.cc index c07b8284ea..a74aa3eaa6 100644 --- a/src/components/utils/src/conditional_variable_boost.cc +++ b/src/components/utils/src/conditional_variable_boost.cc @@ -36,6 +36,7 @@ #include "utils/lock.h" #include "utils/logger.h" +#include <boost/exception/diagnostic_information.hpp> namespace { const long kNanosecondsPerSecond = 1000000000; @@ -62,23 +63,27 @@ void ConditionalVariable::Broadcast() { bool ConditionalVariable::Wait(BaseLock& lock) { // NOTE this grossness is due to boost mutex and recursive mutex not sharing a // superclass - - lock.AssertTakenAndMarkFree(); - // 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!"); + try { + lock.AssertTakenAndMarkFree(); + // 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(); + } catch (const boost::exception& error) { + std::string error_string = boost::diagnostic_information(error); + LOG4CXX_FATAL(logger_, error_string); NOTREACHED(); } - lock.AssertFreeAndMarkTaken(); - return true; } @@ -92,32 +97,38 @@ ConditionalVariable::WaitStatus ConditionalVariable::WaitFor( BaseLock& lock = auto_lock.GetLock(); WaitStatus wait_status = kNoTimeout; - lock.AssertTakenAndMarkFree(); - 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!"); + try { + lock.AssertTakenAndMarkFree(); + 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(); + } catch (const boost::exception& error) { + std::string error_string = boost::diagnostic_information(error); + LOG4CXX_FATAL(logger_, error_string); NOTREACHED(); } - if (!timeout) { - wait_status = kTimeout; - } - lock.AssertFreeAndMarkTaken(); - return wait_status; } diff --git a/src/components/utils/src/semantic_version.cc b/src/components/utils/src/semantic_version.cc index 4b8d37b913..9f0991e991 100644 --- a/src/components/utils/src/semantic_version.cc +++ b/src/components/utils/src/semantic_version.cc @@ -33,6 +33,7 @@ namespace utils { -const SemanticVersion version_4_5(4, 5, 0); +const SemanticVersion base_rpc_version(4, 5, 1); +const SemanticVersion rpc_version_5(5, 0, 0); } // namespace utils
\ No newline at end of file |