Add a couple of missing tests for EAGER_BLACKHOLE
authorSimon Marlow <marlowsd@gmail.com>
Mon, 23 Aug 2010 10:46:54 +0000 (10:46 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Mon, 23 Aug 2010 10:46:54 +0000 (10:46 +0000)
This was leading to looping and excessive allocation, when the
computation should have just blocked on the black hole.

Reported by Christian Höner zu Siederdissen <choener@tbi.univie.ac.at>
on glasgow-haskell-users.

rts/Messages.c
rts/Threads.c

index f7cb809..5e0fa25 100644 (file)
@@ -175,6 +175,7 @@ nat messageBlackHole(Capability *cap, MessageBlackHole *msg)
     // all.
     if (info != &stg_BLACKHOLE_info && 
         info != &stg_CAF_BLACKHOLE_info && 
+        info != &__stg_EAGER_BLACKHOLE_info &&
         info != &stg_WHITEHOLE_info) {
         // if it is a WHITEHOLE, then a thread is in the process of
         // trying to BLACKHOLE it.  But we know that it was once a
index 25241c7..6635ed5 100644 (file)
@@ -388,6 +388,7 @@ updateThunk (Capability *cap, StgTSO *tso, StgClosure *thunk, StgClosure *val)
     i = thunk->header.info;
     if (i != &stg_BLACKHOLE_info &&
         i != &stg_CAF_BLACKHOLE_info &&
+        i != &__stg_EAGER_BLACKHOLE_info &&
         i != &stg_WHITEHOLE_info) {
         updateWithIndirection(cap, thunk, val);
         return;