diff options
Diffstat (limited to 'rts')
| -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;      }  | 
