summaryrefslogtreecommitdiff
path: root/rts/Schedule.c
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2008-12-10 16:46:44 +0000
committerSimon Marlow <marlowsd@gmail.com>2008-12-10 16:46:44 +0000
commit0bff4d75254dabb2c002eace2252a4480bf8474e (patch)
treebc41ea8dee439fea748d3438a9ddfecea6786e52 /rts/Schedule.c
parentd779cca065e2059d300928b0d547798f36afb073 (diff)
downloadhaskell-0bff4d75254dabb2c002eace2252a4480bf8474e.tar.gz
wake up other Capabilities even when there is only one spark (see #2868)
Diffstat (limited to 'rts/Schedule.c')
-rw-r--r--rts/Schedule.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/rts/Schedule.c b/rts/Schedule.c
index 33715b1ecd..38e3a3c2ce 100644
--- a/rts/Schedule.c
+++ b/rts/Schedule.c
@@ -777,9 +777,11 @@ schedulePushWork(Capability *cap USED_IF_THREADS,
// Check whether we have more threads on our run queue, or sparks
// in our pool, that we could hand to another Capability.
- if ((emptyRunQueue(cap) || cap->run_queue_hd->_link == END_TSO_QUEUE)
- && sparkPoolSizeCap(cap) < 2) {
- return;
+ if (cap->run_queue_hd == END_TSO_QUEUE) {
+ if (sparkPoolSizeCap(cap) < 2) return;
+ } else {
+ if (cap->run_queue_hd->_link == END_TSO_QUEUE &&
+ sparkPoolSizeCap(cap) < 1) return;
}
// First grab as many free Capabilities as we can.