From: Ivan Maidanski Date: Mon, 21 Jan 2019 22:01:45 +0000 (+0300) Subject: Fix 'unexpected mark stack overflow' abort in push_all_stack X-Git-Tag: v8.0.4~18 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c9381cc6d27a82142fd0e6a23b2a111cc1cacc93;p=gc Fix 'unexpected mark stack overflow' abort in push_all_stack Issue #260 (bdwgc). * mark.c [!NEED_FIXUP_POINTER] (GC_push_all_stack): Call GC_push_all_eager() instead of GC_push_all() if GC_mark_stack_top is rather close to GC_mark_stack_limit. --- diff --git a/mark.c b/mark.c index 72223bb6..ade6f533 100644 --- a/mark.c +++ b/mark.c @@ -1605,7 +1605,8 @@ GC_INNER void GC_push_all_stack(ptr_t bottom, ptr_t top) # if defined(THREADS) && defined(MPROTECT_VDB) && !GC_auto_incremental # endif - ) { + && (word)GC_mark_stack_top + < (word)(GC_mark_stack_limit - INITIAL_MARK_STACK_SIZE/8)) { GC_push_all(bottom, top); } else # endif