summaryrefslogtreecommitdiff
path: root/rts/sm/NonMovingSweep.c
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-11-30 21:55:58 -0500
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-12-05 16:07:48 -0500
commit69001f54279a55bc4e5e5883c675e5ba6fe49a22 (patch)
treed9a5896071252e60ef1670cc87ce506677d51645 /rts/sm/NonMovingSweep.c
parent8324f0b7357c428f505dccbc84bb7dde897b509c (diff)
downloadhaskell-69001f54279a55bc4e5e5883c675e5ba6fe49a22.tar.gz
nonmoving: Clear segment bitmaps during sweep
Previously we would clear the bitmaps of segments which we are going to sweep during the preparatory pause. However, this is unnecessary: the existence of the mark epoch ensures that the sweep will correctly identify non-reachable objects, even if we do not clear the bitmap. We now defer clearing the bitmap to sweep, which happens concurrently with mutation.
Diffstat (limited to 'rts/sm/NonMovingSweep.c')
-rw-r--r--rts/sm/NonMovingSweep.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/rts/sm/NonMovingSweep.c b/rts/sm/NonMovingSweep.c
index b390959612..925d7c2068 100644
--- a/rts/sm/NonMovingSweep.c
+++ b/rts/sm/NonMovingSweep.c
@@ -65,6 +65,7 @@ nonmovingSweepSegment(struct NonmovingSegment *seg)
} else {
ASSERT(seg->next_free == 0);
ASSERT(nonmovingSegmentInfo(seg)->next_free_snap == 0);
+ nonmovingClearBitmap(seg);
return SEGMENT_FREE;
}
}