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 cf5082d..7652a7c 100644
--- a/src/thread/cancel_impl.c
+++ b/src/thread/cancel_impl.c
@@ -17,7 +17,7 @@
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;