]> AND Private Git Repository - loba.git/blobdiff - synchro.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Update XML files to version 4.1.
[loba.git] / synchro.h
index a2e86f3c1cb9d273d1f1d3a135a87e609b86311d..07897e04febe1eea9075db9590c4bf9571dff2dd 100644 (file)
--- a/synchro.h
+++ b/synchro.h
@@ -1,6 +1,7 @@
 #ifndef SYNCHRO_H
 #define SYNCHRO_H
 
+#include <xbt/ex.hpp>
 #include <xbt/synchro.h>
 
 class mutex_t {
@@ -23,8 +24,17 @@ public:
     void broadcast()            { xbt_cond_broadcast(cond);         }
     void signal()               { xbt_cond_signal(cond);            }
     void wait(mutex_t& mutex)   { xbt_cond_wait(cond, mutex.mutex); }
-    void timedwait(mutex_t& mutex, double delay) {
-        xbt_cond_timedwait(cond, mutex.mutex, delay);
+    bool timedwait(mutex_t& mutex, double delay) {
+        try {
+            xbt_cond_timedwait(cond, mutex.mutex, delay);
+        }
+        catch (const xbt_ex& e) {
+            if (e.category != timeout_error)
+                throw;
+            mutex.acquire();
+            return false;       // got a timeout
+        }
+        return true;
     }
 
 private: