From ce7d72596c57386c493969cc56546c7aba2e1049 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sun, 22 Jan 2012 17:19:37 -0500 Subject: 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. --- src/thread/cancel_impl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; -- cgit v1.2.1