X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fevents.c;h=ec47a169e543856c787cd99e097413858e2a0d2d;hb=d7dcea0e5a8df0f479e99f168a10b9a9535c7ad6;hp=c3ab282ffbe09f80f0290569af431b3e680f171d;hpb=7ba570fe3cc5418f42decf5b72ac2295cce9e60f;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/events.c b/KernelLand/Kernel/events.c index c3ab282f..ec47a169 100644 --- a/KernelLand/Kernel/events.c +++ b/KernelLand/Kernel/events.c @@ -7,8 +7,8 @@ */ #define DEBUG 0 #include -#include #include +#include // === CODE === void Threads_PostEvent(tThread *Thread, Uint32 EventMask) @@ -45,6 +45,8 @@ void Threads_PostEvent(tThread *Thread, Uint32 EventMask) Semaphore_ForceWake(Thread); } break; + default: + break; } SHORTREL( &Thread->IsLocked ); @@ -80,18 +82,11 @@ Uint32 Threads_WaitEvents(Uint32 EventMask) // Check if a wait is needed SHORTLOCK( &us->IsLocked ); - while( !(us->EventState & EventMask) ) + LOG("Locked and preparing for wait"); + if( (us->EventState & EventMask) == 0 ) { - LOG("Locked and preparing for wait"); - // Wait - us->RetStatus = EventMask; // HACK: Store EventMask in RetStatus - SHORTLOCK( &glThreadListLock ); - us = Threads_RemActive(); - us->Status = THREAD_STAT_EVENTSLEEP; - // Note stored anywhere because we're woken using other means - SHORTREL( &glThreadListLock ); - SHORTREL( &us->IsLocked ); - while(us->Status == THREAD_STAT_EVENTSLEEP) Threads_Yield(); + Threads_int_Sleep(THREAD_STAT_EVENTSLEEP, NULL, EventMask, + &us, NULL, &us->IsLocked); // Woken when lock is acquired SHORTLOCK( &us->IsLocked ); }