mirror of
https://github.com/fluencelabs/musl
synced 2025-06-21 10:41:53 +00:00
fix cancellation failure in single-threaded programs
even a single-threaded program can be cancellable, e.g. if it's called pthread_cancel(pthread_self()). the correct predicate to check is not whether multiple threads have been invoked, but whether pthread_self has been invoked.
This commit is contained in:
@ -17,7 +17,7 @@ long (__syscall_cp)(long nr, long u, long v, long w, long x, long y, long z)
|
|||||||
uintptr_t old_sp, old_ip;
|
uintptr_t old_sp, old_ip;
|
||||||
long r;
|
long r;
|
||||||
|
|
||||||
if (!libc.threaded || (self = __pthread_self())->canceldisable)
|
if (!libc.main_thread || (self = __pthread_self())->canceldisable)
|
||||||
return __syscall(nr, u, v, w, x, y, z);
|
return __syscall(nr, u, v, w, x, y, z);
|
||||||
|
|
||||||
old_sp = self->cp_sp;
|
old_sp = self->cp_sp;
|
||||||
|
Reference in New Issue
Block a user