Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix for s4u::ConditionVariable::wait_for, lost by previous commit.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 4 May 2018 21:30:51 +0000 (23:30 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 4 May 2018 21:34:22 +0000 (23:34 +0200)
src/s4u/s4u_ConditionVariable.cpp

index 61d8c9c..c42a524 100644 (file)
@@ -41,25 +41,12 @@ std::cv_status s4u::ConditionVariable::wait_for(std::unique_lock<Mutex>& lock, d
   if (timeout < 0)
     timeout = 0.0;
 
-  try {
-    simcall_cond_wait_timeout(cond_, lock.mutex()->mutex_, timeout);
+  if (simcall_cond_wait_timeout(cond_, lock.mutex()->mutex_, timeout)) {
+    // If we reached the timeout, we have to take the lock again:
+    lock.mutex()->lock();
+    return std::cv_status::timeout;
+  } else {
     return std::cv_status::no_timeout;
-  } catch (xbt_ex& e) {
-
-    // If the exception was a timeout, we have to take the lock again:
-    if (e.category == timeout_error) {
-      try {
-        lock.mutex()->lock();
-        return std::cv_status::timeout;
-      } catch (...) {
-        std::terminate();
-      }
-    }
-
-    // Another exception: should we reaquire the lock?
-    std::terminate();
-  } catch (...) {
-    std::terminate();
   }
 }