summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShobhitAd <adlakhshobhit@gmail.com>2018-09-30 20:44:30 -0700
committerShobhitAd <adlakhshobhit@gmail.com>2018-09-30 20:44:30 -0700
commit1155a0eb7d725f56b153b80ff5feee0c8b44f920 (patch)
treea9c0fff0a7810198c58e309e5d980cbc43581284
parent6abbfaf52d3e1014bad7a7ff9233afb97452230c (diff)
downloadsdl_core-1155a0eb7d725f56b153b80ff5feee0c8b44f920.tar.gz
Fix 188234 Uncaught Exception
-rw-r--r--src/components/utils/src/conditional_variable_boost.cc53
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;
}