summaryrefslogtreecommitdiff
path: root/libc/nptl/pthread_cancel.c
diff options
context:
space:
mode:
Diffstat (limited to 'libc/nptl/pthread_cancel.c')
-rw-r--r--libc/nptl/pthread_cancel.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/libc/nptl/pthread_cancel.c b/libc/nptl/pthread_cancel.c
index 249aa1109..1bfca6358 100644
--- a/libc/nptl/pthread_cancel.c
+++ b/libc/nptl/pthread_cancel.c
@@ -95,6 +95,14 @@ pthread_cancel (th)
break;
}
+
+ /* A single-threaded process should be able to kill itself, since there is
+ nothing in the POSIX specification that says that it cannot. So we set
+ multiple_threads to true so that cancellation points get executed. */
+ THREAD_SETMEM (THREAD_SELF, header.multiple_threads, 1);
+#ifndef TLS_MULTIPLE_THREADS_IN_TCB
+ __pthread_multiple_threads = *__libc_multiple_threads_ptr = 1;
+#endif
}
/* Mark the thread as canceled. This has to be done
atomically since other bits could be modified as well. */