[Gc] race? leads to segfault in GC_suspend_all's call to
pthread_kill
Jim Meyering
jim at meyering.net
Mon May 9 23:50:08 PDT 2011
Andy Wingo wrote:
> On Fri 06 May 2011 16:00, Jim Meyering <jim at meyering.net> writes:
>
>> I had had to explicitly GC_register two threads, but had not arranged
>> for them to be unregistered:
>>
>> http://thread.gmane.org/gmane.comp.lib.iwhd.devel/552
>>
>> Unregistering, as required, solved the problem.
>
> Whoa, good one! Thanks for the note, that was interesting.
Thanks. I wondered if I missed something obvious
in the documentation for GC_register_my_thread, went back
and read its comment and didn't see anything. Considering
the penalty I incurred for not reading about the companion
function (GC_unregister_my_thread), I suggest this note of warning:
2011-05-10 Jim Meyering <meyering at redhat.com>
* include/gc.h (GC_register_my_thread): Add a note of warning:
if you use GC_register_my_thread to register a thread, you must
be sure to unregister it with GC_unregister_my_thread.
Otherwise, your application will fail in a hard-to-diagnose manner.
E.g., http://thread.gmane.org/gmane.comp.lib.iwhd.devel/552
Index: include/gc.h
===================================================================
RCS file: /cvsroot/bdwgc/bdwgc/include/gc.h,v
retrieving revision 1.86
diff -u -p -r1.86 gc.h
--- include/gc.h 7 Apr 2011 20:35:46 -0000 1.86
+++ include/gc.h 10 May 2011 06:42:38 -0000
@@ -1051,6 +1051,9 @@ GC_API void * GC_CALL GC_call_with_stack
/* GC_use_threads_discovery() is called at start-up. Except for the */
/* latter case, the explicit call is normally required for threads */
/* created by third-party libraries. */
+ /* CAUTION: if you call GC_register_my_thread from a thread, T, */
+ /* you must ensure that T calls GC_unregister_my_thread before */
+ /* termination. */
GC_API int GC_CALL GC_register_my_thread(const struct GC_stack_base *);
/* Unregister the current thread. Only an explicitly registered */
More information about the Gc
mailing list