Add comment about `GC_local_malloc ()' upon thread destruction.
authorLudovic Courtes <ludo@gnu.org>
Sun, 21 Oct 2007 18:53:32 +0000 (18:53 +0000)
committerLudovic Courtès <ludo@gnu.org>
Wed, 10 Sep 2008 20:52:10 +0000 (22:52 +0200)
* 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

index a26e344..02e6948 100644 (file)
@@ -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