]> 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 22:57:42 +0000 (01:57 +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 8ba5d6772ccf9fc4a30d61df2a5d4f7a0c883983..aa6972d36e4d7e0adc938605bb98f1b89d292364 100644 (file)
@@ -503,8 +503,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;