X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FTimer.c;h=8088600246e761c591829979ed2635cba437b242;hb=5f8b35ad729740cab1cb8c884deb405dcc758683;hp=0bfea2d6fd9236224c1bec0e359874a9f497d2e1;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/rts/Timer.c b/rts/Timer.c index 0bfea2d..8088600 100644 --- a/rts/Timer.c +++ b/rts/Timer.c @@ -17,10 +17,12 @@ #include "Rts.h" #include "RtsFlags.h" #include "Proftimer.h" +#include "Storage.h" #include "Schedule.h" #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; @@ -53,30 +55,26 @@ handle_tick(int unused STG_UNUSED) #if defined(THREADED_RTS) /* - * If we've been inactive for idleGCDelayTicks (set by +RTS + * If we've been inactive for idleGCDelayTime (set by +RTS * -I), tell the scheduler to wake up and do a GC, to check * for threads that are deadlocked. */ switch (recent_activity) { case ACTIVITY_YES: recent_activity = ACTIVITY_MAYBE_NO; - ticks_to_gc = RtsFlags.GcFlags.idleGCDelayTicks; + ticks_to_gc = RtsFlags.GcFlags.idleGCDelayTime / + RtsFlags.MiscFlags.tickInterval; break; case ACTIVITY_MAYBE_NO: if (ticks_to_gc == 0) break; /* 0 ==> no idle GC */ ticks_to_gc--; if (ticks_to_gc == 0) { - ticks_to_gc = RtsFlags.GcFlags.idleGCDelayTicks; + ticks_to_gc = RtsFlags.GcFlags.idleGCDelayTime / + RtsFlags.MiscFlags.tickInterval; recent_activity = ACTIVITY_INACTIVE; blackholes_need_checking = rtsTrue; /* hack: re-use the blackholes_need_checking flag */ - - /* 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(); + wakeUpRts(); } break; default: @@ -86,17 +84,17 @@ handle_tick(int unused STG_UNUSED) } int -startTimer(nat ms) +startTimer(void) { #ifdef PROFILING initProfTimer(); #endif - return startTicker(ms, handle_tick); + return startTicker(RtsFlags.MiscFlags.tickInterval, handle_tick); } int -stopTimer() +stopTimer(void) { return stopTicker(); }