فهرست منبع

suppress EINTR in sem_wait and sem_timedwait

per POSIX, the EINTR condition is an optional error for these
functions, not a mandatory one. since old kernels (pre-2.6.22) failed
to honor SA_RESTART for the futex syscall, it's dangerous to trust
EINTR from the kernel. thankfully POSIX offers an easy way out.
Rich Felker 10 سال پیش
والد
کامیت
c0ed5a201b
1فایلهای تغییر یافته به همراه1 افزوده شده و 1 حذف شده
  1. 1 1
      src/thread/sem_timedwait.c

+ 1 - 1
src/thread/sem_timedwait.c

@@ -21,7 +21,7 @@ int sem_timedwait(sem_t *restrict sem, const struct timespec *restrict at)
 		a_cas(sem->__val, 0, -1);
 		r = __timedwait(sem->__val, -1, CLOCK_REALTIME, at, cleanup, sem->__val+1, sem->__val[2]);
 		a_dec(sem->__val+1);
-		if (r) {
+		if (r && r != EINTR) {
 			errno = r;
 			return -1;
 		}