X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FTimer.c;h=0bfea2d6fd9236224c1bec0e359874a9f497d2e1;hb=5638488ba28ec84fbf64bf2742a040e3fa30bed4;hp=b6414f8b04580284b84681b74b53bdbc955eb501;hpb=7bb59f381da3728f53ae5ea1bf821154f53c3f94;p=ghc-hetmet.git diff --git a/ghc/rts/Timer.c b/ghc/rts/Timer.c index b6414f8..0bfea2d 100644 --- a/ghc/rts/Timer.c +++ b/ghc/rts/Timer.c @@ -48,41 +48,41 @@ handle_tick(int unused STG_UNUSED) if (ticks_to_ctxt_switch <= 0) { ticks_to_ctxt_switch = RtsFlags.ConcFlags.ctxtSwitchTicks; context_switch = 1; /* schedule a context switch */ + } + } #if defined(THREADED_RTS) - /* - * If we've been inactive for idleGCDelayTicks (set by +RTS - * -I), tell the scheduler to wake up and do a GC, to check - * for threads that are deadlocked. + /* + * If we've been inactive for idleGCDelayTicks (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; + 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; + 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? */ - switch (recent_activity) { - case ACTIVITY_YES: - recent_activity = ACTIVITY_MAYBE_NO; - ticks_to_gc = RtsFlags.GcFlags.idleGCDelayTicks; - 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; - 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(); - } - break; - default: - break; - } -#endif + prodOneCapability(); } + break; + default: + break; } +#endif } int