X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FRtsSignals.h;fp=rts%2FRtsSignals.h;h=eafeeaaf5543abecbcf22fc5b2dc44c0b630fec5;hp=0000000000000000000000000000000000000000;hb=0065d5ab628975892cea1ec7303f968c3338cbe1;hpb=28a464a75e14cece5db40f2765a29348273ff2d2 diff --git a/rts/RtsSignals.h b/rts/RtsSignals.h new file mode 100644 index 0000000..eafeeaa --- /dev/null +++ b/rts/RtsSignals.h @@ -0,0 +1,78 @@ +/* ----------------------------------------------------------------------------- + * + * (c) The GHC Team, 1998-2005 + * + * Signal processing / handling. + * + * ---------------------------------------------------------------------------*/ + +#ifndef RTS_SIGNALS_H +#define RTS_SIGNALS_H + +#if !defined(PAR) && !defined(mingw32_HOST_OS) + +#include "posix/Signals.h" + +#elif defined(mingw32_HOST_OS) + +#include "win32/ConsoleHandler.h" + +#else /* PAR */ + +#define signals_pending() (rtsFalse) + +#endif /* PAR */ + + +#if RTS_USER_SIGNALS + +/* + * Function: initUserSignals() + * + * Initialize the console handling substrate. + */ +extern void initUserSignals(void); + +/* + * Function: initDefaultHandlers() + * + * Install any default signal/console handlers. Currently we install a + * Ctrl+C handler that shuts down the RTS in an orderly manner. + */ +extern void initDefaultHandlers(void); + +/* + * Function: blockUserSignals() + * + * Temporarily block the delivery of further console events. Needed to + * avoid race conditions when GCing the queue of outstanding handlers or + * when emptying the queue by running the handlers. + * + */ +extern void blockUserSignals(void); + +/* + * Function: unblockUserSignals() + * + * The inverse of blockUserSignals(); re-enable the deliver of console events. + */ +extern void unblockUserSignals(void); + +/* + * Function: awaitUserSignals() + * + * Wait for the next console event. Currently a NOP (returns immediately.) + */ +extern void awaitUserSignals(void); + +/* + * Function: markSignalHandlers() + * + * Evacuate the handler queue. _Assumes_ that console event delivery + * has already been blocked. + */ +extern void markSignalHandlers (evac_fn evac); + +#endif /* RTS_USER_SIGNALS */ + +#endif /* RTS_SIGNALS_H */