X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fevents.c;h=a572d43362d1e66628a7cd258a7bdfee581892fa;hb=14d0ba44433f0f828aff710184fd3c597ab73999;hp=2b39714e8f6bc74ac8bf61dfe262af9e22accb64;hpb=0aaaf2139d5b5eb3efbd4aa5fa6eaa083a941e5c;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/events.c b/KernelLand/Kernel/events.c index 2b39714e..a572d433 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) @@ -83,10 +83,13 @@ Uint32 Threads_WaitEvents(Uint32 EventMask) // Check if a wait is needed SHORTLOCK( &us->IsLocked ); LOG("Locked and preparing for wait"); - Threads_int_Sleep(THREAD_STAT_EVENTSLEEP, NULL, EventMask, - &us, NULL, &us->IsLocked); - // Woken when lock is acquired - SHORTLOCK( &us->IsLocked ); + if( (us->EventState & EventMask) == 0 ) + { + Threads_int_Sleep(THREAD_STAT_EVENTSLEEP, NULL, EventMask, + &us, NULL, &us->IsLocked); + // Woken when an event fires + SHORTLOCK( &us->IsLocked ); + } // Get return value and clear changed event bits rv = us->EventState & EventMask;