From: Simon Marlow Date: Thu, 13 Nov 2008 11:43:42 +0000 (+0000) Subject: notice ^C exceptions when waiting for I/O X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=4a875d65b5c86a77a3051256519f9695d701c3be notice ^C exceptions when waiting for I/O --- diff --git a/rts/win32/AwaitEvent.c b/rts/win32/AwaitEvent.c index 43e188f..2175626 100644 --- a/rts/win32/AwaitEvent.c +++ b/rts/win32/AwaitEvent.c @@ -18,6 +18,7 @@ #include "AwaitEvent.h" #include #include "win32/AsyncIO.h" +#include "win32/ConsoleHandler.h" // Used to avoid calling abandonRequestWait() if we don't need to. // Protected by sched_mutex. @@ -34,6 +35,16 @@ awaitEvent(rtsBool wait) workerWaitingForRequests = 1; ret = awaitRequests(wait); workerWaitingForRequests = 0; + + // If a signal was raised, we need to service it + // XXX the scheduler loop really should be calling + // startSignalHandlers(), but this is the way that posix/Select.c + // does it and I'm feeling too paranoid to refactor it today --SDM + if (stg_pending_events != 0) { + startSignalHandlers(&MainCapability); + return; + } + if (!ret) { return; /* still hold the lock */ } diff --git a/rts/win32/ConsoleHandler.c b/rts/win32/ConsoleHandler.c index 25472cf..13011cb 100644 --- a/rts/win32/ConsoleHandler.c +++ b/rts/win32/ConsoleHandler.c @@ -240,6 +240,9 @@ static BOOL WINAPI generic_handler(DWORD dwCtrlType) stg_pending_buf[stg_pending_events] = dwCtrlType; stg_pending_events++; } + + // we need to wake up awaitEvent() + abandonRequestWait(); #endif return TRUE; }