fix cancellation failure in single-threaded programs
authorRich Felker <dalias@aerifal.cx>
Sun, 22 Jan 2012 22:19:37 +0000 (17:19 -0500)
committerRich Felker <dalias@aerifal.cx>
Sun, 22 Jan 2012 22:19:37 +0000 (17:19 -0500)
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

index cf5082d..7652a7c 100644 (file)
@@ -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;