not only is pthread_kill expensive in this case; it also breaks testing under qemu app-level emulation.
@@ -92,5 +92,6 @@ int pthread_cancel(pthread_t t)
init = 1;
}
a_store(&t->cancel, 1);
+ if (t == pthread_self() && !t->cancelasync) return 0;
return pthread_kill(t, SIGCANCEL);