diff options
author | Andy Wingo <wingo@pobox.com> | 2016-10-27 21:22:28 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2016-10-27 21:22:28 +0200 |
commit | a04739b31a561879368c61f7599844fc9a85a7a6 (patch) | |
tree | 0f168ee23d9f12b1e7200c065f20a74531f93dcb /doc/ref/api-scheduling.texi | |
parent | c957ec7ab0f0a028910dc737e12191f7bdc1ca93 (diff) | |
download | guile-a04739b31a561879368c61f7599844fc9a85a7a6.tar.gz |
cancel-thread via asyncs, not pthread_cancel
* module/ice-9/threads.scm (cancel-tag): New variable.
(cancel-thread): New Scheme function.
(call-with-new-thread): Install a prompt around the thread.
* libguile/threads.h (scm_i_thread): Remove cancelled member.
* libguile/threads.c (scm_cancel_thread): Call out to Scheme. Always
available, and works on the current thread too.
(scm_set_thread_cleanup_x, scm_thread_cleanup): Adapt.
(scm_init_ice_9_threads): Capture cancel-thread var.
* doc/ref/api-scheduling.texi (Threads): Update.
* NEWS: Update.
Diffstat (limited to 'doc/ref/api-scheduling.texi')
-rw-r--r-- | doc/ref/api-scheduling.texi | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/doc/ref/api-scheduling.texi b/doc/ref/api-scheduling.texi index 551b3fb38..45b5315ce 100644 --- a/doc/ref/api-scheduling.texi +++ b/doc/ref/api-scheduling.texi @@ -114,17 +114,14 @@ immediate context switch to one of them. Otherwise, yield has no effect. @deffn {Scheme Procedure} cancel-thread thread @deffnx {C Function} scm_cancel_thread (thread) -Asynchronously notify @var{thread} to exit. Immediately after -receiving this notification, @var{thread} will call its cleanup handler -(if one has been set) and then terminate, aborting any evaluation that -is in progress. - -Because Guile threads are isomorphic with POSIX threads, @var{thread} -will not receive its cancellation signal until it reaches a cancellation -point. See your operating system's POSIX threading documentation for -more information on cancellation points; note that in Guile, unlike -native POSIX threads, a thread can receive a cancellation notification -while attempting to lock a mutex. +Asynchronously interrupt @var{thread} and ask it to terminate. +@code{dynamic-wind} post thunks will run, but throw handlers will not. +If @var{thread} has already terminated or been signaled to terminate, +this function is a no-op. + +Under this hood, thread cancellation uses @code{system-async-mark} and +@code{abort-to-prompt}. @xref{Asyncs} for more on asynchronous +interrupts. @end deffn @deffn {Scheme Procedure} set-thread-cleanup! thread proc |