diff options
| -rw-r--r-- | rts/win32/AwaitEvent.c | 11 | ||||
| -rw-r--r-- | rts/win32/ConsoleHandler.c | 3 |
2 files changed, 14 insertions, 0 deletions
diff --git a/rts/win32/AwaitEvent.c b/rts/win32/AwaitEvent.c index 43e188fb34..2175626313 100644 --- a/rts/win32/AwaitEvent.c +++ b/rts/win32/AwaitEvent.c @@ -18,6 +18,7 @@ #include "AwaitEvent.h" #include <windows.h> #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 25472cf583..13011cbe26 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; } |
