From 1155a0eb7d725f56b153b80ff5feee0c8b44f920 Mon Sep 17 00:00:00 2001 From: ShobhitAd Date: Sun, 30 Sep 2018 20:44:30 -0700 Subject: Fix 188234 Uncaught Exception --- .../utils/src/conditional_variable_boost.cc | 53 ++++++++++++---------- 1 file changed, 29 insertions(+), 24 deletions(-) (limited to 'src/components/utils') diff --git a/src/components/utils/src/conditional_variable_boost.cc b/src/components/utils/src/conditional_variable_boost.cc index c07b8284ea..1e5c9b6998 100644 --- a/src/components/utils/src/conditional_variable_boost.cc +++ b/src/components/utils/src/conditional_variable_boost.cc @@ -92,32 +92,37 @@ 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)) { - // Regular lock - // cond_var_.wait(test_lock->mutex_); - timeout = cond_var_.timed_wait( - test_lock->mutex_, boost::posix_time::milliseconds(milliseconds)); - } else if (RecursiveLock* test_rec_lock = - dynamic_cast(&lock)) { - // Recursive lock - // cond_var_.wait(test_rec_lock->mutex_); - timeout = cond_var_.timed_wait( - 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(); + try{ + lock.AssertTakenAndMarkFree(); + bool timeout = true; + + // What kind of lock are we ? + if (Lock* test_lock = dynamic_cast(&lock)) { + // Regular lock + // cond_var_.wait(test_lock->mutex_); + timeout = cond_var_.timed_wait( + test_lock->mutex_, boost::posix_time::milliseconds(milliseconds)); + } else if (RecursiveLock* test_rec_lock = + dynamic_cast(&lock)) { + // Recursive lock + // cond_var_.wait(test_rec_lock->mutex_); + timeout = cond_var_.timed_wait( + 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); } - if (!timeout) { - wait_status = kTimeout; - } - lock.AssertFreeAndMarkTaken(); - return wait_status; } -- cgit v1.2.1