summaryrefslogtreecommitdiff
path: root/src/components/utils/src/conditional_variable_boost.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/utils/src/conditional_variable_boost.cc')
-rw-r--r--src/components/utils/src/conditional_variable_boost.cc87
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();