From ceb1ebdb73b4a2c29982e8a757db263d498646c5 Mon Sep 17 00:00:00 2001 From: sletz Date: Sun, 13 Jun 2010 20:12:52 +0000 Subject: [PATCH] Fix JackPosixSemaphore::TimedWait : same behavior as JackPosixSemaphore::Wait regarding EINTR. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4023 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 4 ++++ posix/JackPosixSemaphore.cpp | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) 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); }