summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2010-08-23 10:46:54 +0000
committerSimon Marlow <marlowsd@gmail.com>2010-08-23 10:46:54 +0000
commitfd316eba4747cf8bb9381e06c7afc3c024e1e5c1 (patch)
treef0c88c9a695b1d708a779545a6e5ea5d87b454a1 /rts
parenteff182c31745b958d627d4feb1e53c09298c6836 (diff)
downloadhaskell-fd316eba4747cf8bb9381e06c7afc3c024e1e5c1.tar.gz
Add a couple of missing tests for EAGER_BLACKHOLE
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.
Diffstat (limited to 'rts')
-rw-r--r--rts/Messages.c1
-rw-r--r--rts/Threads.c1
2 files changed, 2 insertions, 0 deletions
diff --git a/rts/Messages.c b/rts/Messages.c
index f7cb809351..5e0fa2544f 100644
--- a/rts/Messages.c
+++ b/rts/Messages.c
@@ -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
diff --git a/rts/Threads.c b/rts/Threads.c
index 25241c746a..6635ed51e5 100644
--- a/rts/Threads.c
+++ b/rts/Threads.c
@@ -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;