recheck cancellation disabled flag after syscall returns EINTR

we already checked before making the syscall, but it's possible that a
signal handler interrupted the blocking syscall and disabled
cancellation, and that this is the cause of EINTR. in this case, the
old behavior was testably wrong.
This commit is contained in:
Rich Felker 2011-04-18 20:50:37 -04:00
parent 61b56a8d21
commit be2e06d347

View File

@ -27,7 +27,7 @@ long (__syscall_cp)(long nr, long u, long v, long w, long x, long y, long z)
r = __syscall_cp_asm(&self->cp_sp, nr, u, v, w, x, y, z);
self->cp_ip = old_ip;
self->cp_sp = old_sp;
if (r == -EINTR && self->cancel) __cancel();
if (r == -EINTR && self->cancel && !self->canceldisable) __cancel();
return r;
}