diff options
author | ShobhitAd <adlakhshobhit@gmail.com> | 2018-09-30 20:44:30 -0700 |
---|---|---|
committer | ShobhitAd <adlakhshobhit@gmail.com> | 2018-09-30 20:44:30 -0700 |
commit | 1155a0eb7d725f56b153b80ff5feee0c8b44f920 (patch) | |
tree | a9c0fff0a7810198c58e309e5d980cbc43581284 | |
parent | 6abbfaf52d3e1014bad7a7ff9233afb97452230c (diff) | |
download | sdl_core-1155a0eb7d725f56b153b80ff5feee0c8b44f920.tar.gz |
Fix 188234 Uncaught Exception
-rw-r--r-- | src/components/utils/src/conditional_variable_boost.cc | 53 |
1 files changed, 29 insertions, 24 deletions
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*>(&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(); + 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); } - if (!timeout) { - wait_status = kTimeout; - } - lock.AssertFreeAndMarkTaken(); - return wait_status; } |