projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Re-adjust interaction between -ddump flags and force-recompilation
[ghc-hetmet.git]
/
rts
/
Schedule.h
diff --git
a/rts/Schedule.h
b/rts/Schedule.h
index
59bdb9e
..
6ed7598
100644
(file)
--- a/
rts/Schedule.h
+++ b/
rts/Schedule.h
@@
-70,7
+70,9
@@
StgWord findRetryFrameHelper (StgTSO *tso);
* Called from STG : NO
* Locks assumed : none
*/
* Called from STG : NO
* Locks assumed : none
*/
-void workerStart(Task *task);
+#if defined(THREADED_RTS)
+void OSThreadProcAttr workerStart(Task *task);
+#endif
#if defined(GRAN)
void awaken_blocked_queue(StgBlockingQueueElement *q, StgClosure *node);
#if defined(GRAN)
void awaken_blocked_queue(StgBlockingQueueElement *q, StgClosure *node);
@@
-237,16
+239,21
@@
appendToBlockedQueue(StgTSO *tso)
#endif
#if defined(THREADED_RTS)
#endif
#if defined(THREADED_RTS)
+// Assumes: my_cap is owned by the current Task. We hold
+// other_cap->lock, but we do not necessarily own other_cap; another
+// Task may be running on it.
INLINE_HEADER void
INLINE_HEADER void
-appendToWakeupQueue (Capability *cap, StgTSO *tso)
+appendToWakeupQueue (Capability *my_cap, Capability *other_cap, StgTSO *tso)
{
ASSERT(tso->_link == END_TSO_QUEUE);
{
ASSERT(tso->_link == END_TSO_QUEUE);
- if (cap->wakeup_queue_hd == END_TSO_QUEUE) {
- cap->wakeup_queue_hd = tso;
+ if (other_cap->wakeup_queue_hd == END_TSO_QUEUE) {
+ other_cap->wakeup_queue_hd = tso;
} else {
} else {
- setTSOLink(cap, cap->wakeup_queue_tl, tso);
+ // my_cap is passed to setTSOLink() because it may need to
+ // write to the mutable list.
+ setTSOLink(my_cap, other_cap->wakeup_queue_tl, tso);
}
}
- cap->wakeup_queue_tl = tso;
+ other_cap->wakeup_queue_tl = tso;
}
#endif
}
#endif