Sanity: Check nonmoving heap sanity after concurrent GC
authorBen Gamari <ben@smart-cactus.org>
Sat, 27 Apr 2019 19:56:24 +0000 (15:56 -0400)
committerBen Gamari <ben@smart-cactus.org>
Wed, 19 Jun 2019 01:44:00 +0000 (21:44 -0400)
rts/sm/NonMoving.c
rts/sm/Sanity.c
rts/sm/Sanity.h

index 3520690..c89d028 100644 (file)
@@ -10,6 +10,7 @@
 #include "RtsUtils.h"
 #include "Capability.h"
 #include "Printer.h"
+#include "Sanity.h"
 #include "Storage.h"
 // We call evacuate, which expects the thread-local gc_thread to be valid;
 // This is sometimes declared as a register variable therefore it is necessary
index cc615f8..44cd348 100644 (file)
@@ -470,7 +470,13 @@ void checkHeapChain (bdescr *bd)
     StgPtr p;
 
     for (; bd != NULL; bd = bd->link) {
-        if(!(bd->flags & BF_SWEPT)) {
+        if (false && bd->flags & BF_NONMOVING) {
+            struct NonmovingSegment *seg = (struct NonmovingSegment *) bd->start;
+            for (nonmoving_block_idx i=0; i < nonmovingSegmentBlockCount(seg); i++) {
+                if (nonmovingGetMark(seg, i) == nonmovingMarkEpoch) 
+                    checkClosure((StgClosure *) nonmovingSegmentGetBlock(seg, i));
+            }
+        } else if(!(bd->flags & BF_SWEPT)) {
             p = bd->start;
             while (p < bd->free) {
                 uint32_t size = checkClosure((StgClosure *)p);
index b6f2054..de97ec1 100644 (file)
@@ -23,6 +23,7 @@
 void checkSanity        ( bool after_gc, bool major_gc );
 void checkNurserySanity ( nursery *nursery );
 void checkHeapChain     ( bdescr *bd );
+void checkNonmovingHeap ( const struct NonmovingHeap *heap );
 void checkHeapChunk     ( StgPtr start, StgPtr end );
 void checkLargeObjects  ( bdescr *bd );
 void checkTSO           ( StgTSO* tso );