Fix infinite mark_some calls after memory mapping disappeared (Glibc)
authorIvan Maidanski <ivmai@mail.ru>
Tue, 19 Sep 2017 07:51:24 +0000 (10:51 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 19 Sep 2017 07:51:48 +0000 (10:51 +0300)
Issue #179 (bdwgc).

* mark.c [WRAP_MARK_SOME && REGISTER_LIBRARIES_EARLY] (GC_mark_some):
Call GC_cond_register_dynamic_libraries (with the world running)
before GC_invalidate_mark_state().

mark.c

diff --git a/mark.c b/mark.c
index c9adca3..d51abeb 100644 (file)
--- a/mark.c
+++ b/mark.c
@@ -594,6 +594,11 @@ handle_ex:
       }
       /* We have bad roots on the stack.  Discard mark stack.   */
       /* Rescan from marked objects.  Redetermine roots.        */
+#     ifdef REGISTER_LIBRARIES_EARLY
+        START_WORLD();
+        GC_cond_register_dynamic_libraries();
+        STOP_WORLD();
+#     endif
       GC_invalidate_mark_state();
       scan_ptr = 0;