bool ThreadSleeper::sleep(Timeout timeout) { if (timeout.isInfinite()) { sem_wait(&semaphore); } else { timespec tmspc = timeout.getExpireTime().getTimeSpec(); int res = sem_timedwait(&semaphore,&tmspc); if (res == -1) { int e = errno; if (e == ETIMEDOUT) return true; if (e != EINTR) throw ErrNoException(THISLOCATION,e); //Consider EINTR as wakeUp return false; } } while (sem_trywait(&semaphore) == 0) {} return false; }