X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2Fwin32%2FAwaitEvent.c;h=d9e2cbce77a119292bfa851b669a282fa7cf9556;hb=78b72ed1e0ffab668e0d4bb31657942970515e4f;hp=6986bc9a3627ed44b25b8e7b62b7d6e363195a0c;hpb=03a9ff01812afc81eb5236fd3063cbec44cf469e;p=ghc-hetmet.git diff --git a/ghc/rts/win32/AwaitEvent.c b/ghc/rts/win32/AwaitEvent.c index 6986bc9..d9e2cbc 100644 --- a/ghc/rts/win32/AwaitEvent.c +++ b/ghc/rts/win32/AwaitEvent.c @@ -14,11 +14,9 @@ */ #include "Rts.h" #include "Schedule.h" +#include "AwaitEvent.h" #include #include "win32/AsyncIO.h" -#if defined(THREADED_RTS) -#include "Capability.h" -#endif // Used to avoid calling abandonRequestWait() if we don't need to. // Protected by sched_mutex. @@ -29,23 +27,11 @@ awaitEvent(rtsBool wait) { int ret; -#ifdef THREADED_RTS - // Small optimisation: we don't want the waiting thread to wake - // up straight away just because a previous returning worker has - // called abandonRequestWait(). If the event is no longer needed, - // reset it. We must do this inside the sched_mutex. - if (!needToYieldToReturningWorker()) { - resetAbandonRequestWait(); - } -#endif - do { /* Try to de-queue completed IO requests */ workerWaitingForRequests = 1; - RELEASE_LOCK(&sched_mutex); ret = awaitRequests(wait); - ACQUIRE_LOCK(&sched_mutex); workerWaitingForRequests = 0; if (!ret) { return; /* still hold the lock */ @@ -55,23 +41,9 @@ awaitEvent(rtsBool wait) // // - we were interrupted // - new threads have arrived - // - another worker wants to take over (THREADED_RTS) } while (wait && !interrupted - && run_queue_hd == END_TSO_QUEUE -#ifdef THREADED_RTS - && !needToYieldToReturningWorker() -#endif + && emptyRunQueue(&MainCapability) ); } - -#ifdef THREADED_RTS -void -wakeBlockedWorkerThread() -{ - if (workerWaitingForRequests) { - abandonRequestWait(); - } -} -#endif