summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2022-10-22 21:41:42 +0000
committerBen Gamari <ben@smart-cactus.org>2022-10-22 21:41:42 +0000
commit753c98023aafda898c6106f90d3af8a033d0c109 (patch)
treef04ea210d6a49142a6a4ccbf4f8a1e772d01ce82
parentddbba3ac974de9df4237558391a2ba86c00706f9 (diff)
downloadhaskell-wip/gc/oct-2022-fixes-9.2.tar.gz
nonmoving: Post-sweep sanity checkingwip/gc/oct-2022-fixes-9.2
-rw-r--r--rts/sm/NonMoving.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/rts/sm/NonMoving.c b/rts/sm/NonMoving.c
index 41dc8bfe8c..90192af4a7 100644
--- a/rts/sm/NonMoving.c
+++ b/rts/sm/NonMoving.c
@@ -26,8 +26,11 @@
#include "NonMovingCensus.h"
#include "StablePtr.h" // markStablePtrTable
#include "Schedule.h" // markScheduler
+#include "Sanity.h"
#include "Weak.h" // dead_weak_ptr_list
+#define NONCONCURRENT_SWEEP
+
struct NonmovingHeap nonmovingHeap;
uint8_t nonmovingMarkEpoch = 1;
@@ -1196,7 +1199,7 @@ static void nonmovingMark_(MarkQueue *mark_queue, StgWeak **dead_weaks, StgTSO *
#endif
// Everything has been marked; allow the mutators to proceed
-#if defined(THREADED_RTS)
+#if defined(THREADED_RTS) && !defined(NONCONCURRENT_SWEEP)
nonmoving_write_barrier_enabled = false;
nonmovingFinishFlush(task);
#endif
@@ -1235,6 +1238,15 @@ static void nonmovingMark_(MarkQueue *mark_queue, StgWeak **dead_weaks, StgTSO *
nonmovingTraceAllocatorCensus();
#endif
+#if defined(THREADED_RTS) && defined(NONCONCURRENT_SWEEP)
+#if defined(DEBUG)
+ checkNonmovingHeap(&nonmovingHeap);
+ checkSanity(true, true);
+#endif
+ nonmoving_write_barrier_enabled = false;
+ nonmovingFinishFlush(task);
+#endif
+
// TODO: Remainder of things done by GarbageCollect (update stats)
#if defined(THREADED_RTS)