summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2022-10-22 21:04:16 +0000
committerBen Gamari <ben@smart-cactus.org>2023-01-09 15:22:49 -0500
commitf1c9a041c85530f0022eee6ba5c818987e263e88 (patch)
tree74b43058e3ed187f51144e4311dda7a1373fb9ef
parent8b82a2b0cc77810ff31b0802b1e0a20e50360a87 (diff)
downloadhaskell-f1c9a041c85530f0022eee6ba5c818987e263e88.tar.gz
nonmoving: Assert state of swept segments
-rw-r--r--rts/sm/NonMoving.h2
-rw-r--r--rts/sm/NonMovingSweep.c1
2 files changed, 3 insertions, 0 deletions
diff --git a/rts/sm/NonMoving.h b/rts/sm/NonMoving.h
index 01ff4c4c39..b27ee4e87c 100644
--- a/rts/sm/NonMoving.h
+++ b/rts/sm/NonMoving.h
@@ -45,8 +45,10 @@ enum NonmovingSegmentState {
};
#define SET_SEGMENT_STATE(seg, st) RELAXED_STORE(&(seg)->state, (st))
+#define ASSERT_SEGMENT_STATE(seg, st) ASSERT(RELAXED_LOAD(&(seg)->state) == (st))
#else
#define SET_SEGMENT_STATE(_seg,_st)
+#define ASSERT_SEGMENT_STATE(_seg, _st)
#endif
// A non-moving heap segment
diff --git a/rts/sm/NonMovingSweep.c b/rts/sm/NonMovingSweep.c
index fea2d74915..b6df768828 100644
--- a/rts/sm/NonMovingSweep.c
+++ b/rts/sm/NonMovingSweep.c
@@ -31,6 +31,7 @@ enum SweepResult {
GNUC_ATTR_HOT static enum SweepResult
nonmovingSweepSegment(struct NonmovingSegment *seg)
{
+ ASSERT_SEGMENT_STATE(seg, FILLED_SWEEPING);
const nonmoving_block_idx blk_cnt = nonmovingSegmentBlockCount(seg);
bool found_free = false;
bool found_live = false;