]> granicus.if.org Git - gc/commitdiff
Fix pthread_detach for threads not yet registered (Cygwin, winpthreads)
authorIvan Maidanski <ivmai@mail.ru>
Wed, 27 Sep 2017 07:52:09 +0000 (10:52 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 3 Oct 2017 08:45:19 +0000 (11:45 +0300)
(Cherry-pick commit 45bf28f from 'release-7_4' branch.)

* win32_threads.c [GC_PTHREADS] (GC_pthread_detach): Repeat
GC_lookup_pthread() (with a 10 msec delay) while t is null; add comment
and TODO; remove ABORT if t is null (as t is never null after
pthread_detach call).

win32_threads.c

index d853240c88a02887831cb0ff3a65e9031cf94aeb..b425757940978453f2de88edbdf9788b101095d5 100644 (file)
@@ -2574,7 +2574,10 @@ GC_INNER void GC_thr_init(void)
     DCL_LOCK_STATE;
 
     if (!parallel_initialized) GC_init_parallel();
-    t = GC_lookup_pthread(thread);
+    /* The thread might not have registered itself yet. */
+    /* TODO: Wait for registration of the created thread in pthread_create. */
+    while ((t = GC_lookup_pthread(thread)) == NULL)
+      Sleep(10);
     result = pthread_detach(thread);
     if (result == 0) {
       LOCK();