projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix an assertion that was not safe when running in parallel
[ghc-hetmet.git]
/
rts
/
Capability.h
diff --git
a/rts/Capability.h
b/rts/Capability.h
index
4b51548
..
4030b5e
100644
(file)
--- a/
rts/Capability.h
+++ b/
rts/Capability.h
@@
-56,7
+56,7
@@
struct Capability_ {
// the suspended TSOs easily. Hence, when migrating a Task from
// the returning_tasks list, we must also migrate its entry from
// this list.
// the suspended TSOs easily. Hence, when migrating a Task from
// the returning_tasks list, we must also migrate its entry from
// this list.
- Task *suspended_ccalling_tasks;
+ InCall *suspended_ccalls;
// One mutable list per generation, so we don't need to take any
// locks when updating an old-generation thunk. This also lets us
// One mutable list per generation, so we don't need to take any
// locks when updating an old-generation thunk. This also lets us
@@
-88,11
+88,8
@@
struct Capability_ {
Task *returning_tasks_hd; // Singly-linked, with head/tail
Task *returning_tasks_tl;
Task *returning_tasks_hd; // Singly-linked, with head/tail
Task *returning_tasks_tl;
- // A list of threads to append to this Capability's run queue at
- // the earliest opportunity. These are threads that have been
- // woken up by another Capability.
- StgTSO *wakeup_queue_hd;
- StgTSO *wakeup_queue_tl;
+ // Messages, or END_TSO_QUEUE.
+ Message *inbox;
SparkPool *sparks;
SparkPool *sparks;
@@
-285,6
+282,18
@@
void markCapabilities (evac_fn evac, void *user);
void traverseSparkQueues (evac_fn evac, void *user);
/* -----------------------------------------------------------------------------
void traverseSparkQueues (evac_fn evac, void *user);
/* -----------------------------------------------------------------------------
+ Messages
+ -------------------------------------------------------------------------- */
+
+#ifdef THREADED_RTS
+
+INLINE_HEADER rtsBool emptyInbox(Capability *cap);;
+
+void sendMessage (Capability *cap, Message *msg);
+
+#endif // THREADED_RTS
+
+/* -----------------------------------------------------------------------------
* INLINE functions... private below here
* -------------------------------------------------------------------------- */
* INLINE functions... private below here
* -------------------------------------------------------------------------- */
@@
-333,6
+342,15
@@
contextSwitchCapability (Capability *cap)
cap->context_switch = 1;
}
cap->context_switch = 1;
}
+#ifdef THREADED_RTS
+
+INLINE_HEADER rtsBool emptyInbox(Capability *cap)
+{
+ return (cap->inbox == (Message*)END_TSO_QUEUE);
+}
+
+#endif
+
END_RTS_PRIVATE
#endif /* CAPABILITY_H */
END_RTS_PRIVATE
#endif /* CAPABILITY_H */