X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FTimer.c;h=b6414f8b04580284b84681b74b53bdbc955eb501;hb=84b434c5c07ce864353cdf9780873555daad3b47;hp=99a76c3b75ca37e22397eeca144dd08f2ee4bcb1;hpb=33a84b8c79f0ccd2400996a0e571b0659d4c16ed;p=ghc-hetmet.git diff --git a/ghc/rts/Timer.c b/ghc/rts/Timer.c index 99a76c3..b6414f8 100644 --- a/ghc/rts/Timer.c +++ b/ghc/rts/Timer.c @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------------- * - * (c) The GHC Team, 1995-2003 + * (c) The GHC Team, 1995-2005 * * Interval timer service for profiling and pre-emptive scheduling. * @@ -19,19 +19,16 @@ #include "Proftimer.h" #include "Schedule.h" #include "Timer.h" +#include "Ticker.h" #include "Capability.h" -#if !defined(mingw32_HOST_OS) -#include "Itimer.h" -#else -#include "win32/Ticker.h" -#endif - /* ticks left before next pre-emptive context switch */ static int ticks_to_ctxt_switch = 0; +#if defined(THREADED_RTS) /* idle ticks left before we perform a GC */ static int ticks_to_gc = 0; +#endif /* * Function: handle_tick() @@ -52,7 +49,7 @@ handle_tick(int unused STG_UNUSED) ticks_to_ctxt_switch = RtsFlags.ConcFlags.ctxtSwitchTicks; context_switch = 1; /* schedule a context switch */ -#if defined(RTS_SUPPORTS_THREADS) +#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 @@ -71,10 +68,13 @@ handle_tick(int unused STG_UNUSED) recent_activity = ACTIVITY_INACTIVE; blackholes_need_checking = rtsTrue; /* hack: re-use the blackholes_need_checking flag */ - threadRunnable(); - /* ToDo: this threadRunnable only works if there's - * another thread (not this one) waiting to be woken up + + /* 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: