From 35747a3e063ae0dd2e8828c680a76e8589d7b8c7 Mon Sep 17 00:00:00 2001 From: Ludovic Courtes Date: Sun, 21 Oct 2007 18:53:32 +0000 Subject: [PATCH] Add comment about `GC_local_malloc ()' upon thread destruction. * libguile/threads.c (on_thread_exit): Add caveat about possible segfault. git-archimport-id: lcourtes@laas.fr--2006-libre/guile-core--boehm-gc--0--patch-8 --- libguile/threads.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libguile/threads.c b/libguile/threads.c index a26e344c8..02e6948b2 100644 --- a/libguile/threads.c +++ b/libguile/threads.c @@ -512,6 +512,17 @@ on_thread_exit (void *v) /* Unblocking the joining threads needs to happen in guile mode since the queue is a SCM data structure. */ + + /* Note: `scm_with_guile ()' invokes `GC_local_malloc ()', which accesses + thread-local storage (TLS). If said storage is accessed using + `pthread_getspecific ()', then it may be inaccessible at this point, + having been destroyed earlier, since the invocation order of destructors + associated with pthread keys is unspecified: + + http://www.opengroup.org/onlinepubs/009695399/functions/pthread_key_create.html + + Thus, `libgc' *must* be compiled with `USE_COMPILER_TLS' for this code + to work. */ scm_with_guile (do_thread_exit, v); /* Removing ourself from the list of all threads needs to happen in -- 2.20.1