X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fwin32%2FConsoleHandler.c;h=19057a3d8d5c3e1d855aeb12cd1c4dce16c49044;hb=fff1f6194c3c39de53cd645bda9865fb131b1c68;hp=76ebea05832289912005d2b914676ee467ece765;hpb=dffddba53a656bf59f2463edc845ca1af9fa133e;p=ghc-hetmet.git diff --git a/rts/win32/ConsoleHandler.c b/rts/win32/ConsoleHandler.c index 76ebea0..19057a3 100644 --- a/rts/win32/ConsoleHandler.c +++ b/rts/win32/ConsoleHandler.c @@ -5,10 +5,8 @@ #include "Rts.h" #include #include "ConsoleHandler.h" -#include "SchedAPI.h" #include "Schedule.h" #include "RtsUtils.h" -#include "RtsFlags.h" #include "AsyncIO.h" #include "RtsSignals.h" @@ -119,6 +117,12 @@ void initDefaultHandlers(void) } } +void resetDefaultHandlers(void) +{ + if ( !SetConsoleCtrlHandler(shutdown_handler, FALSE) ) { + errorBelch("warning: failed to uninstall default console handler"); + } +} /* * Function: blockUserSignals() @@ -199,7 +203,7 @@ void startSignalHandlers(Capability *cap) * Evacuate the handler stack. _Assumes_ that console event delivery * has already been blocked. */ -void markSignalHandlers (evac_fn evac STG_UNUSED) +void markSignalHandlers (evac_fn evac STG_UNUSED, void *user STG_UNUSED) { // nothing to mark; the console handler is a StablePtr which is // already treated as a root by the GC. @@ -234,6 +238,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; }