]> granicus.if.org Git - gc/commitdiff
Fix array_mark_proc to request global mark stack growth on overflow
authorIvan Maidanski <ivmai@mail.ru>
Wed, 9 Aug 2017 08:35:25 +0000 (11:35 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Wed, 16 Aug 2017 23:01:35 +0000 (02:01 +0300)
(fix commit 3f06655)

* typd_mlc.c [PARALLEL_MARK] (GC_array_mark_proc): Set
GC_mark_stack_too_small to true if GC_push_complex_descriptor()
returned null and mark_stack_limit belongs to the global mark stack
(even if GC_parallel is true).

typd_mlc.c

index 2e1da820ee4286b17160401c17057c2a7e671fc2..3cf56fa52da2c2d5cda16eaf6546a2c1b7bc796a 100644 (file)
@@ -521,8 +521,8 @@ STATIC mse * GC_array_mark_proc(word * addr, mse * mark_stack_ptr,
         /* This cannot cause a mark stack overflow, since it replaces   */
         /* the original array entry.                                    */
 #       ifdef PARALLEL_MARK
-            /* We are using a local_mark_stack in parallel mode.        */
-            if (!GC_parallel)
+            /* We might be using a local_mark_stack in parallel mode.   */
+            if (GC_mark_stack + GC_mark_stack_size == mark_stack_limit)
 #       endif
         {
             GC_mark_stack_too_small = TRUE;