mirror of git://git.musl-libc.org/musl
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:
parent
61b56a8d21
commit
be2e06d347
|
@ -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);
|
r = __syscall_cp_asm(&self->cp_sp, nr, u, v, w, x, y, z);
|
||||||
self->cp_ip = old_ip;
|
self->cp_ip = old_ip;
|
||||||
self->cp_sp = old_sp;
|
self->cp_sp = old_sp;
|
||||||
if (r == -EINTR && self->cancel) __cancel();
|
if (r == -EINTR && self->cancel && !self->canceldisable) __cancel();
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue