X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Ftime.c;h=478c41f3d1410070e3bea1ddd922f1fd5eab70e1;hb=b6e856e1570c371b7002f1a93a1ea0e978ffdab6;hp=a6ccd8be1c3f869e3fe9edf2266f7502f0502caf;hpb=9c05263776f7fc01de6a3247f9d5f88ed58a9ddc;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/time.c b/KernelLand/Kernel/time.c index a6ccd8be..478c41f3 100644 --- a/KernelLand/Kernel/time.c +++ b/KernelLand/Kernel/time.c @@ -76,8 +76,9 @@ void Timer_CallTimers() { // Tick the random number generator every time timers are checked rand(); - + SHORTLOCK(&gTimers_ListLock); + LOG("gTimers = %p (%lli ms)", gTimers, (gTimers ? gTimers->FiresAfter : 0)); while( gTimers && gTimers->FiresAfter < now() ) { ASSERT( gTimers != gTimers->Next ); @@ -231,6 +232,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 @@ -238,9 +247,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); }