X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Ftime.c;h=29d8ddb13ca8ebad3c9ef43a8887a1be5386826b;hb=cb71a803fb168f500ad7c7dc36ad4bc9ba7c03a1;hp=d8c2924580d0dcac0f91584c37ade2318df4393d;hpb=533eecb9c9c351c668c3a6b9d49f28325a914162;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/time.c b/KernelLand/Kernel/time.c index d8c29245..29d8ddb1 100644 --- a/KernelLand/Kernel/time.c +++ b/KernelLand/Kernel/time.c @@ -8,19 +8,11 @@ #define DEBUG 0 #include #include +#include #include #include // Proc_GetCurThread #include - -// === TYPEDEFS === -struct sTimer { - tTimer *Next; - Sint64 FiresAfter; - void (*Callback)(void*); - void *Argument; -// tMutex Lock; - BOOL bActive; -}; +#include // Used to get thread timer // === PROTOTYPES === void Timer_CallbackThread(void *Unused); @@ -125,7 +117,8 @@ tTimer *Time_CreateTimer(int Delta, tTimerCallback *Callback, void *Argument) */ void Time_ScheduleTimer(tTimer *Timer, int Delta) { - tTimer *t, *p; + tTimer *t; + tTimer **prev_next; // Sanity checks if( !Timer ) return ; @@ -142,9 +135,10 @@ void Time_ScheduleTimer(tTimer *Timer, int Delta) // Add into list (sorted) SHORTLOCK(&gTimers_ListLock); // Mutex_Release( &Timer->Lock ); // Prevent deadlocks - for( p = (tTimer*)&gTimers, t = gTimers; t; p = t, t = t->Next ) + for( prev_next = &gTimers, t = gTimers; t; prev_next = &t->Next, t = t->Next ) { - ASSERT( p != t ); ASSERT( CheckMem(t, sizeof(tTimer)) ); + ASSERT( prev_next != &t->Next ); + ASSERT( CheckMem(t, sizeof(tTimer)) ); if( t == Timer ) { LOG("Double schedule - increasing delta"); @@ -155,9 +149,9 @@ void Time_ScheduleTimer(tTimer *Timer, int Delta) if( t->FiresAfter > Timer->FiresAfter ) break; } Timer->Next = t; - p->Next = Timer; + *prev_next = Timer; Timer->bActive = 1; - LOG(" %p %p %p", p, Timer, t); + LOG(" %p %p %p", prev_next, Timer, t); SHORTREL(&gTimers_ListLock); } @@ -166,17 +160,19 @@ void Time_ScheduleTimer(tTimer *Timer, int Delta) */ void Time_RemoveTimer(tTimer *Timer) { - tTimer *t, *p; + tTimer *t; + tTimer **prev_next; if( !Timer ) return ; SHORTLOCK(&gTimers_ListLock); - for( p = (tTimer*)&gTimers, t = gTimers; t; p = t, t = t->Next ) + for( prev_next = &gTimers, t = gTimers; t; prev_next = &t->Next, t = t->Next ) { - ASSERT( p != t ); ASSERT( CheckMem(t, sizeof(tTimer)) ); + ASSERT( prev_next != &t->Next ); + ASSERT( CheckMem(t, sizeof(tTimer)) ); if( t == Timer ) { - p->Next = t->Next; + *prev_next = t->Next; break ; } } @@ -240,11 +236,10 @@ void Time_FreeTimer(tTimer *Timer) */ void Time_Delay(int Delay) { - tTimer *t; - t = Time_AllocateTimer(NULL, NULL); + tTimer *t = &Proc_GetCurThread()->ThreadTimer; + Time_InitTimer(t, NULL, NULL); Time_ScheduleTimer(t, Delay); Threads_WaitEvents(THREAD_EVENT_TIMER); - Time_FreeTimer(t); } // === EXPORTS ===