X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Ftime.c;h=15b61907216536d3af5b50b178c8ace8866f431d;hb=2b339e917d778c76b249457bcb66c4fb0007c495;hp=b0ea5e4555cb7633e7599f0a16554808088cae25;hpb=3612a6ef234e1928762239d4f47d0f04b0aa15a6;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/time.c b/KernelLand/Kernel/time.c index b0ea5e45..15b61907 100644 --- a/KernelLand/Kernel/time.c +++ b/KernelLand/Kernel/time.c @@ -74,6 +74,9 @@ void Timer_CallbackThread(void *Unused) */ void Timer_CallTimers() { + // Tick the random number generator every time timers are checked + rand(); + SHORTLOCK(&gTimers_ListLock); while( gTimers && gTimers->FiresAfter < now() ) { @@ -228,6 +231,14 @@ void Time_FreeTimer(tTimer *Timer) LOG("%p deallocated %p", __builtin_return_address(0), Timer); } +void Time_ScheduleEvent(int Delay) +{ + tTimer *t = &Proc_GetCurThread()->ThreadTimer; + Time_RemoveTimer(t); + Time_InitTimer(t, NULL, NULL); + Time_ScheduleTimer(t, Delay); +} + /** * \fn void Time_Delay(int Delay) * \brief Delay for a small ammount of time @@ -235,9 +246,8 @@ void Time_FreeTimer(tTimer *Timer) void Time_Delay(int Delay) { LOG("(%i)", Delay); - tTimer *t = &Proc_GetCurThread()->ThreadTimer; - Time_InitTimer(t, NULL, NULL); - Time_ScheduleTimer(t, Delay); + Threads_ClearEvent(THREAD_EVENT_TIMER); + Time_ScheduleEvent(Delay); Threads_WaitEvents(THREAD_EVENT_TIMER); }