summaryrefslogtreecommitdiffstats
path: root/raul
diff options
context:
space:
mode:
Diffstat (limited to 'raul')
-rw-r--r--raul/Semaphore.hpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/raul/Semaphore.hpp b/raul/Semaphore.hpp
index c45f92d..38b9251 100644
--- a/raul/Semaphore.hpp
+++ b/raul/Semaphore.hpp
@@ -25,8 +25,9 @@
#elif defined(_WIN32)
# include <windows.h>
#else
-# include <semaphore.h>
# include <errno.h>
+# include <semaphore.h>
+# include <time.h>
#endif
namespace Raul {
@@ -229,8 +230,18 @@ inline bool
Semaphore::timed_wait(unsigned ms)
{
const unsigned seconds = ms / 1000;
- const struct timespec_t t = { seconds, (ms - (seconds * 1000)) * 1000000 };
- return (sem_timedwait(_sem, &t) == 0);
+
+ struct timespec now;
+ clock_gettime(CLOCK_REALTIME, &now);
+
+ struct timespec delta = { seconds, (ms - (seconds * 1000)) * 1000000 };
+ struct timespec end = { now.tv_sec + delta.tv_sec,
+ now.tv_nsec + delta.tv_nsec };
+ if (end.tv_nsec >= 1000000000L) {
+ ++end.tv_sec;
+ end.tv_nsec -= 1000000000L;
+ }
+ return (sem_timedwait(&_sem, &end) == 0);
}
#endif