X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FSchedule.c;h=28e54f95164325b1966a6d566e7c70b593d67799;hb=9fe7b8ea2136a4a07752b2851840c9366706f832;hp=978adb89c8d7d9c050499a032d812122e2a770be;hpb=348e8f801ab659d84acfb49a5c7bbac63646e73a;p=ghc-hetmet.git diff --git a/rts/Schedule.c b/rts/Schedule.c index 978adb8..28e54f9 100644 --- a/rts/Schedule.c +++ b/rts/Schedule.c @@ -744,6 +744,7 @@ scheduleYield (Capability **pcap, Task *task) // if we have work, and we don't need to give up the Capability, continue. if (!shouldYieldCapability(cap,task) && (!emptyRunQueue(cap) || + !emptyWakeupQueue(cap) || blackholes_need_checking || sched_state >= SCHED_INTERRUPTING)) return; @@ -2202,22 +2203,16 @@ exitScheduler( { Task *task = NULL; -#if defined(THREADED_RTS) ACQUIRE_LOCK(&sched_mutex); task = newBoundTask(); RELEASE_LOCK(&sched_mutex); -#endif // If we haven't killed all the threads yet, do it now. if (sched_state < SCHED_SHUTTING_DOWN) { sched_state = SCHED_INTERRUPTING; -#if defined(THREADED_RTS) waitForReturnCapability(&task->cap,task); scheduleDoGC(task->cap,task,rtsFalse); releaseCapability(task->cap); -#else - scheduleDoGC(&MainCapability,task,rtsFalse); -#endif } sched_state = SCHED_SHUTTING_DOWN;