diff --git a/ChangeLog b/ChangeLog index 9402d37d..91f0bced 100644 --- a/ChangeLog +++ b/ChangeLog @@ -30,6 +30,10 @@ Arnold Krille Jackdmp changes log --------------------------- +2010-06-13 Stephane Letz + + * Fix JackPosixSemaphore::TimedWait : same behavior as JackPosixSemaphore::Wait regarding EINTR. + 2010-05-31 Stephane Letz * Fix from Fernando Lopez-Lezcano for compilation on fc13. diff --git a/posix/JackPosixSemaphore.cpp b/posix/JackPosixSemaphore.cpp index e5a7cc59..d151c5a4 100644 --- a/posix/JackPosixSemaphore.cpp +++ b/posix/JackPosixSemaphore.cpp @@ -118,10 +118,12 @@ bool JackPosixSemaphore::TimedWait(long usec) time.tv_sec += tv_usec / 1000000; time.tv_nsec = (tv_usec % 1000000) * 1000; - if ((res = sem_timedwait(fSemaphore, &time)) != 0) { + while ((res = sem_timedwait(fSemaphore, &time)) < 0) { jack_error("JackPosixSemaphore::TimedWait err = %s", strerror(errno)); jack_log("now %ld %ld ", now.tv_sec, now.tv_usec); jack_log("next %ld %ld ", time.tv_sec, time.tv_nsec/1000); + if (errno != EINTR) + break; } return (res == 0); }