X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FThreadPaused.c;h=4882ab2374b148c603661378a8c58c9b2c989816;hb=c7ea7c15942c6369bcca2cc13012d228a80fe926;hp=674d0d9ca37cee622ef7cb23bb3ecf18edb95dae;hpb=d600bf7a6afdbfc4a22f9379406a9c6f789a4c2d;p=ghc-hetmet.git diff --git a/rts/ThreadPaused.c b/rts/ThreadPaused.c index 674d0d9..4882ab2 100644 --- a/rts/ThreadPaused.c +++ b/rts/ThreadPaused.c @@ -74,7 +74,7 @@ stackSqueeze(StgTSO *tso, StgPtr bottom) * screw us up if we don't check. */ if (upd->updatee != updatee && !closure_IND(upd->updatee)) { - UPD_IND_NOLOCK(upd->updatee, updatee); + UPD_IND(upd->updatee, updatee); } // now mark this update frame as a stack gap. The gap @@ -195,6 +195,10 @@ threadPaused(Capability *cap, StgTSO *tso) maybePerformBlockedException (cap, tso); if (tso->what_next == ThreadKilled) { return; } + // NB. Blackholing is *not* optional, we must either do lazy + // blackholing, or eager blackholing consistently. See Note + // [upd-black-hole] in sm/Scav.c. + stack_end = &tso->stack[tso->stack_size]; frame = (StgClosure *)tso->sp;