X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FItimer.c;h=c327528e1295903c4b57b1eec81ce5190fc0121c;hb=66f7a41dfbf02a000ef3fb2a2b84c89f5dd53177;hp=73794f4a5b6fc0659bff3ffd680529f292028f41;hpb=d443a744c91f8344b72583573b9135bf185ab86a;p=ghc-hetmet.git diff --git a/ghc/rts/Itimer.c b/ghc/rts/Itimer.c index 73794f4..c327528 100644 --- a/ghc/rts/Itimer.c +++ b/ghc/rts/Itimer.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Itimer.c,v 1.12 2000/03/21 11:33:12 rrt Exp $ + * $Id: Itimer.c,v 1.16 2000/08/03 11:28:35 simonmar Exp $ * * (c) The GHC Team, 1995-1999 * @@ -23,7 +23,9 @@ #endif #include "Rts.h" +#include "RtsFlags.h" #include "Itimer.h" +#include "Proftimer.h" #include "Schedule.h" /* As recommended in the autoconf manual */ @@ -43,7 +45,9 @@ #endif lnat total_ticks = 0; -rtsBool do_prof_ticks = rtsFalse; + +/* ticks left before next pre-emptive context switch */ +int ticks_to_ctxt_switch = 0; static void @@ -73,13 +77,17 @@ handle_tick(int unused STG_UNUSED) total_ticks++; #ifdef PROFILING - if (do_prof_ticks == rtsTrue) { - CCS_TICK(CCCS); - } + handleProfTick(); #endif /* For threadDelay etc., see Select.c */ ticks_since_select++; + + ticks_to_ctxt_switch--; + if (ticks_to_ctxt_switch <= 0) { + ticks_to_ctxt_switch = RtsFlags.ConcFlags.ctxtSwitchTicks; + context_switch = 1; /* schedule a context switch */ + } } @@ -96,22 +104,6 @@ handle_tick(int unused STG_UNUSED) #if defined(mingw32_TARGET_OS) || (defined(cygwin32_TARGET_OS) && !defined(HAVE_SETITIMER)) -/* - * Sigh - to avoid requiring anyone that wants to build ghc to have - * to augment the Win32 header files that comes with cygwinb20.1, - * include the missing MM API decls here inline. - * - * ToDo: check and remove these once the next version of cygwin is - * released. - */ -#define TIMERR_NOERROR 0 -#define TIMERR_NOCANDO 97 -#define TIME_PERIODIC 1 - -typedef UINT MMRESULT; -typedef void CALLBACK (*TIMECALLBACK) (UINT, UINT, DWORD, DWORD, DWORD); -typedef TIMECALLBACK *LPTIMECALLBACK; -MMRESULT STDCALL timeSetEvent(UINT, UINT, LPTIMECALLBACK, DWORD, UINT); /* vtalrm_handler is assigned and set up in Signals.c @@ -149,6 +141,7 @@ initialize_virtual_timer(nat ms) 0, TIME_PERIODIC); # endif + return 0; }