summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/semaphore.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/semaphore.cc b/src/semaphore.cc
index a7c8e74..fdc33f1 100644
--- a/src/semaphore.cc
+++ b/src/semaphore.cc
@@ -168,6 +168,20 @@ void Semaphore::wait()
#elif DG_PLATFORM == DG_PLATFORM_OSX
MPWaitOnSemaphore(prv->semaphore, kDurationForever);
#else
- sem_wait(&prv->semaphore);
+again:
+ int ret = sem_wait(&prv->semaphore);
+ if(ret < 0)
+ {
+ if(errno == EINTR)
+ {
+ // The wait were interrupted prematurely so we need to wait again
+ // To prevent an infinite loop-like behaviour we make a short sleep.
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
+ goto again;
+ }
+
+ perror("sem_wait()");
+ assert(false);
+ }
#endif
}