From: Rich Felker Date: Sun, 22 Jan 2012 22:19:37 +0000 (-0500) Subject: fix cancellation failure in single-threaded programs X-Git-Tag: v0.8.4~1 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=ce7d72596c57386c493969cc56546c7aba2e1049;p=oweals%2Fmusl.git 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. --- diff --git a/src/thread/cancel_impl.c b/src/thread/cancel_impl.c index cf5082d3..7652a7c9 100644 --- a/src/thread/cancel_impl.c +++ b/src/thread/cancel_impl.c @@ -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; 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); old_sp = self->cp_sp;