Explorar el Código

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 hace 10 años
padre
commit
c0ed5a201b
Se han modificado 1 ficheros con 1 adiciones y 1 borrados
  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;
 		}