diff options
Diffstat (limited to 'rts/RaiseAsync.c')
-rw-r--r-- | rts/RaiseAsync.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/rts/RaiseAsync.c b/rts/RaiseAsync.c index e8a6a81747..b3b84496d7 100644 --- a/rts/RaiseAsync.c +++ b/rts/RaiseAsync.c @@ -922,6 +922,7 @@ raiseAsync(Capability *cap, StgTSO *tso, StgClosure *exception, ap->payload[i] = (StgClosure *)*sp++; } + write_barrier(); SET_HDR(ap,&stg_AP_STACK_NOUPD_info,stack->header.prof.ccs); TICK_ALLOC_SE_THK(WDS(words+1),0); @@ -960,6 +961,7 @@ raiseAsync(Capability *cap, StgTSO *tso, StgClosure *exception, // raise = (StgThunk *)allocate(cap,sizeofW(StgThunk)+1); TICK_ALLOC_SE_THK(WDS(1),0); + write_barrier(); SET_HDR(raise,&stg_raise_info,cf->header.prof.ccs); raise->payload[0] = exception; @@ -1040,8 +1042,9 @@ raiseAsync(Capability *cap, StgTSO *tso, StgClosure *exception, atomically = (StgThunk*)allocate(cap,sizeofW(StgThunk)+1); TICK_ALLOC_SE_THK(1,0); - SET_HDR(atomically,&stg_atomically_info,af->header.prof.ccs); atomically->payload[0] = af->code; + write_barrier(); + SET_HDR(atomically,&stg_atomically_info,af->header.prof.ccs); // discard stack up to and including the ATOMICALLY_FRAME frame += sizeofW(StgAtomicallyFrame); |