diff options
author | Ben Gamari <ben@smart-cactus.org> | 2019-09-28 17:52:48 +0000 |
---|---|---|
committer | Moritz Angermann <moritz.angermann@gmail.com> | 2020-09-18 07:53:02 +0000 |
commit | faa9d602e5a8afd2e4deeb0c7a79cb8959e12075 (patch) | |
tree | 841764671685f33fc9fe011ca58272ad3af446ca | |
parent | 1527a70f88d94627fd6c672b7cb5573bf795da26 (diff) | |
download | haskell-faa9d602e5a8afd2e4deeb0c7a79cb8959e12075.tar.gz |
rts/Updates: Use proper atomic operations
-rw-r--r-- | rts/Updates.h | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/rts/Updates.h b/rts/Updates.h index 1bd3e065af..c5491ad8b2 100644 --- a/rts/Updates.h +++ b/rts/Updates.h @@ -76,19 +76,17 @@ INLINE_HEADER void updateWithIndirection (Capability *cap, /* not necessarily true: ASSERT( !closure_IND(p1) ); */ /* occurs in RaiseAsync.c:raiseAsync() */ /* See Note [Heap memory barriers] in SMP.h */ - write_barrier(); - OVERWRITING_CLOSURE(p1); - ((StgInd *)p1)->indirectee = p2; - write_barrier(); - SET_INFO(p1, &stg_BLACKHOLE_info); - LDV_RECORD_CREATE(p1); - bd = Bdescr((StgPtr)p1); + bdescr *bd = Bdescr((StgPtr)p1); if (bd->gen_no != 0) { recordMutableCap(p1, cap, bd->gen_no); TICK_UPD_OLD_IND(); } else { TICK_UPD_NEW_IND(); } + OVERWRITING_CLOSURE(p1); + RELEASE_STORE(&((StgInd *)p1)->indirectee, p2); + SET_INFO_RELEASE(p1, &stg_BLACKHOLE_info); + LDV_RECORD_CREATE(p1); } #endif /* CMINUSMINUS */ |