X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FTimer.c;h=9822239b334bf79b147318bdb84e96a64691c37a;hp=493fe3d35f9c697dab5a107b06446eaadd70f57c;hb=45202530612593a0ba7a6c559a38dc1ff26670a4;hpb=e30aca19def5c629a8429bd57e56535b7f8f85c8 diff --git a/rts/Timer.c b/rts/Timer.c index 493fe3d..9822239 100644 --- a/rts/Timer.c +++ b/rts/Timer.c @@ -42,9 +42,7 @@ static void handle_tick(int unused STG_UNUSED) { -#ifdef PROFILING handleProfTick(); -#endif if (RtsFlags.ConcFlags.ctxtSwitchTicks > 0) { ticks_to_ctxt_switch--; if (ticks_to_ctxt_switch <= 0) { @@ -66,15 +64,21 @@ handle_tick(int unused STG_UNUSED) 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.idleGCDelayTime / - RtsFlags.MiscFlags.tickInterval; - recent_activity = ACTIVITY_INACTIVE; - blackholes_need_checking = rtsTrue; - /* hack: re-use the blackholes_need_checking flag */ - wakeUpRts(); + /* 0 ==> no idle GC */ + recent_activity = ACTIVITY_DONE_GC; + // disable timer signals (see #1623) + stopTimer(); + } else { + ticks_to_gc--; + if (ticks_to_gc == 0) { + 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 */ + wakeUpRts(); + } } break; default: @@ -84,17 +88,34 @@ handle_tick(int unused STG_UNUSED) } void -startTimer(void) +initTimer(void) { -#ifdef PROFILING - initProfTimer(); -#endif + initProfTimer(); + if (RtsFlags.MiscFlags.tickInterval != 0) { + initTicker(RtsFlags.MiscFlags.tickInterval, handle_tick); + } +} - startTicker(RtsFlags.MiscFlags.tickInterval, handle_tick); +void +startTimer(void) +{ + if (RtsFlags.MiscFlags.tickInterval != 0) { + startTicker(); + } } void stopTimer(void) { - stopTicker(); + if (RtsFlags.MiscFlags.tickInterval != 0) { + stopTicker(); + } +} + +void +exitTimer(void) +{ + if (RtsFlags.MiscFlags.tickInterval != 0) { + exitTicker(); + } }