diff options
author | Ben Gamari <ben@smart-cactus.org> | 2022-11-16 00:14:32 -0500 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-12-23 19:09:30 -0500 |
commit | 0cd31f7d2c8baea0489770c765a7b8dd5c79679f (patch) | |
tree | eda6e6d7a2702ff800ebe96dfc7512736b2fd878 | |
parent | c99367180e49d903f8be649bfdc11e95649c7d1a (diff) | |
download | haskell-0cd31f7d2c8baea0489770c765a7b8dd5c79679f.tar.gz |
nonmoving: Make bitmap accesses atomic
This is a benign race on any sensible hard since these are byte
accesses. Nevertheless, atomic accesses are necessary to satisfy
TSAN.
-rw-r--r-- | rts/sm/NonMoving.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/rts/sm/NonMoving.h b/rts/sm/NonMoving.h index 2700f8a8f8..1f0f68fac6 100644 --- a/rts/sm/NonMoving.h +++ b/rts/sm/NonMoving.h @@ -276,12 +276,12 @@ extern uint8_t nonmovingMarkEpoch; INLINE_HEADER void nonmovingSetMark(struct NonmovingSegment *seg, nonmoving_block_idx i) { - seg->bitmap[i] = nonmovingMarkEpoch; + RELAXED_STORE(&seg->bitmap[i], nonmovingMarkEpoch); } INLINE_HEADER uint8_t nonmovingGetMark(struct NonmovingSegment *seg, nonmoving_block_idx i) { - return seg->bitmap[i]; + return RELAXED_LOAD(&seg->bitmap[i]); } INLINE_HEADER void nonmovingSetClosureMark(StgPtr p) |