projects
/
ghc-hetmet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
8ec22a5
)
add comments and an ASSERT_LOCK_HELD()
author
Simon Marlow
<marlowsd@gmail.com>
Wed, 8 Oct 2008 11:26:27 +0000
(11:26 +0000)
committer
Simon Marlow
<marlowsd@gmail.com>
Wed, 8 Oct 2008 11:26:27 +0000
(11:26 +0000)
rts/RaiseAsync.c
patch
|
blob
|
history
diff --git
a/rts/RaiseAsync.c
b/rts/RaiseAsync.c
index
d411c41
..
10d91a7
100644
(file)
--- a/
rts/RaiseAsync.c
+++ b/
rts/RaiseAsync.c
@@
-575,6
+575,12
@@
performBlockedException (Capability *cap, StgTSO *source, StgTSO *target)
This is for use when we raise an exception in another thread, which
may be blocked.
This is for use when we raise an exception in another thread, which
may be blocked.
+
+ Precondition: we have exclusive access to the TSO, which entails
+ holding a lock on the object that owns the queue, if the TSO is
+ blocked. e.g. if the thread is blocked on an MVar, we must hold a
+ lock on the MVar before calling removeFromQueues().
+
This has nothing to do with the UnblockThread event in GranSim. -- HWL
-------------------------------------------------------------------------- */
This has nothing to do with the UnblockThread event in GranSim. -- HWL
-------------------------------------------------------------------------- */
@@
-752,6
+758,9
@@
removeFromQueues(Capability *cap, StgTSO *tso)
goto done;
case BlockedOnBlackHole:
goto done;
case BlockedOnBlackHole:
+ // we have exclusive access to this TSO, which implies that we
+ // must hold sched_mutex:
+ ASSERT_LOCK_HELD(&sched_mutex);
removeThreadFromQueue(cap, &blackhole_queue, tso);
goto done;
removeThreadFromQueue(cap, &blackhole_queue, tso);
goto done;