diff options
Diffstat (limited to 'rts/Timer.c')
-rw-r--r-- | rts/Timer.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/rts/Timer.c b/rts/Timer.c index 0bfea2d6fd..4b13be4556 100644 --- a/rts/Timer.c +++ b/rts/Timer.c @@ -21,6 +21,7 @@ #include "Timer.h" #include "Ticker.h" #include "Capability.h" +#include "RtsSignals.h" /* ticks left before next pre-emptive context switch */ static int ticks_to_ctxt_switch = 0; @@ -71,12 +72,19 @@ handle_tick(int unused STG_UNUSED) blackholes_need_checking = rtsTrue; /* hack: re-use the blackholes_need_checking flag */ +#if !defined(mingw32_HOST_OS) + // This forces the IO Manager thread to wakeup, which will + // in turn ensure that some OS thread wakes up and runs the + // scheduler loop, which will cause a GC and deadlock check. + ioManagerWakeup(); +#else /* ToDo: this doesn't work. Can't invoke * pthread_cond_signal from a signal handler. * Furthermore, we can't prod a capability that we * might be holding. What can we do? */ prodOneCapability(); +#endif } break; default: |