From: Ivan Maidanski Date: Tue, 21 Jun 2016 20:38:23 +0000 (+0300) Subject: Fix assertion violation in GC_wait_builder called from start_mark_threads X-Git-Tag: v7.4.6~271 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ef4754093a2724ba6ead8e4ee5f56a6210f41453;p=gc Fix assertion violation in GC_wait_builder called from start_mark_threads (Apply commit d02ea97 from 'master' branch.) * mark.c (GC_wait_for_markers_init): Surround function body with DISABLE/RESTORE_CANCEL. Conflicts: * include/private/gc_priv.h * pthread_support.c * win32_threads.c --- diff --git a/mark.c b/mark.c index eb8efc79..e23a7966 100644 --- a/mark.c +++ b/mark.c @@ -914,10 +914,12 @@ GC_INNER word GC_mark_no = 0; GC_INNER void GC_wait_for_markers_init(void) { word count; + IF_CANCEL(int cancel_state;) if (GC_markers_m1 == 0) return; + DISABLE_CANCEL(cancel_state); /* Reuse marker lock and builders count to synchronize */ /* marker threads startup. */ GC_acquire_mark_lock(); @@ -926,6 +928,7 @@ GC_INNER void GC_wait_for_markers_init(void) GC_release_mark_lock(); if (count != 0) GC_wait_for_reclaim(); + RESTORE_CANCEL(cancel_state); } /* Steal mark stack entries starting at mse low into mark stack local */