summaryrefslogtreecommitdiff
path: root/rts/StgMiscClosures.cmm
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2015-07-07 08:52:53 +0100
committerSimon Marlow <marlowsd@gmail.com>2015-07-07 15:07:49 +0100
commitebfc2fb884764eae65df4c5da68d2ad5aaa7b95a (patch)
tree65cc7d641a755983be26aec002d12cb65f51f654 /rts/StgMiscClosures.cmm
parent62fcf0515112b918152dd8bf053f84d9ec0d1501 (diff)
downloadhaskell-ebfc2fb884764eae65df4c5da68d2ad5aaa7b95a.tar.gz
Update comments around blackholes
Test Plan: validate Reviewers: austin, bgamari Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D1047
Diffstat (limited to 'rts/StgMiscClosures.cmm')
-rw-r--r--rts/StgMiscClosures.cmm16
1 files changed, 9 insertions, 7 deletions
diff --git a/rts/StgMiscClosures.cmm b/rts/StgMiscClosures.cmm
index dd2570617d..e3be2cb697 100644
--- a/rts/StgMiscClosures.cmm
+++ b/rts/StgMiscClosures.cmm
@@ -355,17 +355,12 @@ retry:
}
}
-INFO_TABLE(__stg_EAGER_BLACKHOLE,1,0,BLACKHOLE,"BLACKHOLE","BLACKHOLE")
- (P_ node)
-{
- jump ENTRY_LBL(stg_BLACKHOLE) (node);
-}
-
// CAF_BLACKHOLE is allocated when entering a CAF. The reason it is
// distinct from BLACKHOLE is so that we can tell the difference
// between an update frame on the stack that points to a CAF under
// evaluation, and one that points to a closure that is under
-// evaluation by another thread (a BLACKHOLE). See threadPaused().
+// evaluation by another thread (a BLACKHOLE). see Note [suspend
+// duplicate work] in ThreadPaused.c
//
INFO_TABLE(stg_CAF_BLACKHOLE,1,0,BLACKHOLE,"BLACKHOLE","BLACKHOLE")
(P_ node)
@@ -373,6 +368,13 @@ INFO_TABLE(stg_CAF_BLACKHOLE,1,0,BLACKHOLE,"BLACKHOLE","BLACKHOLE")
jump ENTRY_LBL(stg_BLACKHOLE) (node);
}
+// EAGER_BLACKHOLE exists for the same reason as CAF_BLACKHOLE (see above).
+INFO_TABLE(__stg_EAGER_BLACKHOLE,1,0,BLACKHOLE,"BLACKHOLE","BLACKHOLE")
+ (P_ node)
+{
+ jump ENTRY_LBL(stg_BLACKHOLE) (node);
+}
+
INFO_TABLE(stg_BLOCKING_QUEUE_CLEAN,4,0,BLOCKING_QUEUE,"BLOCKING_QUEUE","BLOCKING_QUEUE")
{ foreign "C" barf("BLOCKING_QUEUE_CLEAN object entered!") never returns; }