--- old/src/os/posix/vm/os_posix.cpp 2015-06-25 18:20:29.113452575 +0200 +++ new/src/os/posix/vm/os_posix.cpp 2015-06-25 18:20:28.965447535 +0200 @@ -1050,18 +1050,24 @@ void PosixSemaphore::wait() { int ret; - while ((ret = sem_wait(&_semaphore)) == -1 && errno == EINTR) { - // Retry if the wait was interrupted by a signal. - } + + do { + ret = sem_wait(&_semaphore); + } while (ret != 0 && errno == EINTR); + assert_with_errno(ret == 0, "sem_wait failed"); } bool PosixSemaphore::trywait() { - bool succeeded = sem_trywait(&_semaphore) == 0; + int ret; + + do { + ret = sem_trywait(&_semaphore); + } while (ret != 0 && errno == EINTR); - assert_with_errno(succeeded || errno == EAGAIN, "trywait failed"); + assert_with_errno(ret == 0 || errno == EAGAIN, "trywait failed"); - return succeeded; + return ret == 0; } bool PosixSemaphore::timedwait(const struct timespec ts) {