Fix assertion violation in mark_local checking GC_mark_stack_top
authorIvan Maidanski <ivmai@mail.ru>
Thu, 17 Nov 2016 07:23:53 +0000 (10:23 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Thu, 17 Nov 2016 07:23:53 +0000 (10:23 +0300)
* mark.c (GC_mark_local): Replace AO_load with AO_load_acquire in
the assertion comparing global_first_nonempty to GC_mark_stack_top.

mark.c

diff --git a/mark.c b/mark.c
index f8928b3..b83ad91 100644 (file)
--- a/mark.c
+++ b/mark.c
@@ -1075,7 +1075,7 @@ STATIC void GC_mark_local(mse *local_mark_stack, int id)
                         + sizeof(mse));
         GC_ASSERT((word)global_first_nonempty >= (word)GC_mark_stack &&
                   (word)global_first_nonempty <=
-                        (word)AO_load((volatile AO_t *)&GC_mark_stack_top)
+                    (word)AO_load_acquire((volatile AO_t *)&GC_mark_stack_top)
                         + sizeof(mse));
         if ((word)my_first_nonempty < (word)global_first_nonempty) {
             my_first_nonempty = global_first_nonempty;