Do not link ghc stage1 using -threaded, only for stage2 or 3
[ghc-hetmet.git] / rts / ThreadPaused.c
index 5463dee..4882ab2 100644 (file)
@@ -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;
@@ -250,9 +254,6 @@ threadPaused(Capability *cap, StgTSO *tso)
            }
 
            if (bh->header.info != &stg_CAF_BLACKHOLE_info) {
-#if (!defined(LAZY_BLACKHOLING)) && defined(DEBUG)
-               debugBelch("Unexpected lazy BHing required at 0x%04lx\n",(long)bh);
-#endif
                // zero out the slop so that the sanity checker can tell
                // where the next closure is.
                DEBUG_FILL_SLOP(bh);
@@ -261,7 +262,7 @@ threadPaused(Capability *cap, StgTSO *tso)
                // We pretend that bh is now dead.
                LDV_recordDead_FILL_SLOP_DYNAMIC((StgClosure *)bh);
 #endif
-
+                // an EAGER_BLACKHOLE gets turned into a BLACKHOLE here.
 #ifdef THREADED_RTS
                 cur_bh_info = (const StgInfoTable *)
                     cas((StgVolatilePtr)&bh->header.info,