projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[project @ 2005-11-03 11:02:00 by simonmar]
[ghc-hetmet.git]
/
ghc
/
rts
/
StgMiscClosures.cmm
diff --git
a/ghc/rts/StgMiscClosures.cmm
b/ghc/rts/StgMiscClosures.cmm
index
ed7b199
..
628e0f1
100644
(file)
--- a/
ghc/rts/StgMiscClosures.cmm
+++ b/
ghc/rts/StgMiscClosures.cmm
@@
-338,9
+338,18
@@
INFO_TABLE(stg_BLACKHOLE,0,1,BLACKHOLE,"BLACKHOLE","BLACKHOLE")
TICK_ENT_BH();
TICK_ENT_BH();
+#ifdef SMP
+ // foreign "C" debugBelch("BLACKHOLE entry\n");
+#endif
+
/* Actually this is not necessary because R1 is about to be destroyed. */
LDV_ENTER(R1);
/* Actually this is not necessary because R1 is about to be destroyed. */
LDV_ENTER(R1);
+#if defined(SMP)
+ foreign "C" ACQUIRE_LOCK(sched_mutex "ptr");
+ // released in stg_block_blackhole_finally
+#endif
+
/* Put ourselves on the blackhole queue */
StgTSO_link(CurrentTSO) = W_[blackhole_queue];
W_[blackhole_queue] = CurrentTSO;
/* Put ourselves on the blackhole queue */
StgTSO_link(CurrentTSO) = W_[blackhole_queue];
W_[blackhole_queue] = CurrentTSO;
@@
-349,8
+358,7
@@
INFO_TABLE(stg_BLACKHOLE,0,1,BLACKHOLE,"BLACKHOLE","BLACKHOLE")
StgTSO_why_blocked(CurrentTSO) = BlockedOnBlackHole::I16;
StgTSO_block_info(CurrentTSO) = R1;
StgTSO_why_blocked(CurrentTSO) = BlockedOnBlackHole::I16;
StgTSO_block_info(CurrentTSO) = R1;
- /* stg_gen_block is too heavyweight, use a specialised one */
- jump stg_block_1;
+ jump stg_block_blackhole;
}
#if defined(PAR) || defined(GRAN)
}
#if defined(PAR) || defined(GRAN)
@@
-398,6
+406,15
@@
INFO_TABLE(stg_CAF_BLACKHOLE,0,1,CAF_BLACKHOLE,"CAF_BLACKHOLE","CAF_BLACKHOLE")
TICK_ENT_BH();
LDV_ENTER(R1);
TICK_ENT_BH();
LDV_ENTER(R1);
+#if defined(SMP)
+ // foreign "C" debugBelch("BLACKHOLE entry\n");
+#endif
+
+#if defined(SMP)
+ foreign "C" ACQUIRE_LOCK(sched_mutex "ptr");
+ // released in stg_block_blackhole_finally
+#endif
+
/* Put ourselves on the blackhole queue */
StgTSO_link(CurrentTSO) = W_[blackhole_queue];
W_[blackhole_queue] = CurrentTSO;
/* Put ourselves on the blackhole queue */
StgTSO_link(CurrentTSO) = W_[blackhole_queue];
W_[blackhole_queue] = CurrentTSO;
@@
-406,8
+423,7
@@
INFO_TABLE(stg_CAF_BLACKHOLE,0,1,CAF_BLACKHOLE,"CAF_BLACKHOLE","CAF_BLACKHOLE")
StgTSO_why_blocked(CurrentTSO) = BlockedOnBlackHole::I16;
StgTSO_block_info(CurrentTSO) = R1;
StgTSO_why_blocked(CurrentTSO) = BlockedOnBlackHole::I16;
StgTSO_block_info(CurrentTSO) = R1;
- /* stg_gen_block is too heavyweight, use a specialised one */
- jump stg_block_1;
+ jump stg_block_blackhole;
}
#ifdef EAGER_BLACKHOLING
}
#ifdef EAGER_BLACKHOLING