X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FTimer.c;h=4b13be45565115ed4fbad0994d811803470e2b2f;hb=47936fa626f195b057de16b35c0e6ca40666fc62;hp=0bfea2d6fd9236224c1bec0e359874a9f497d2e1;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/rts/Timer.c b/rts/Timer.c index 0bfea2d..4b13be4 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: