X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=KernelLand%2FKernel%2Frwlock.c;h=979df4ac70909a15e0d83883f20191e0fdad82fb;hb=cb414d6f5f9730d64b4914e45c14d9c16aea0b6c;hp=6706bb228f66f1ce03940c621b0ed3fd72d67c71;hpb=11dbd684e9a3d907d43d71a3145205f1a86992fb;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/rwlock.c b/KernelLand/Kernel/rwlock.c index 6706bb22..979df4ac 100644 --- a/KernelLand/Kernel/rwlock.c +++ b/KernelLand/Kernel/rwlock.c @@ -5,6 +5,7 @@ * rwlock.c * - Reader-Writer Lockes */ +#define DEBUG 0 #include #include #include @@ -16,12 +17,14 @@ int RWLock_AcquireRead(tRWLock *Lock) { tThread *us; + LOG("Acquire RWLock Read %p", Lock); // Get protector SHORTLOCK( &Lock->Protector ); // Check if the lock is already held by a writer if( Lock->Owner ) { + LOG("Waiting"); SHORTLOCK( &glThreadListLock ); // - Remove from active list @@ -56,6 +59,7 @@ int RWLock_AcquireRead(tRWLock *Lock) Lock->Level++; SHORTREL( & Lock->Protector ); } + LOG("Obtained"); return 0; } @@ -64,9 +68,12 @@ int RWLock_AcquireWrite(tRWLock *Lock) { tThread *us; + LOG("Acquire RWLock Write %p", Lock); + SHORTLOCK(&Lock->Protector); if( Lock->Owner || Lock->Level != 0 ) { + LOG("Waiting"); SHORTLOCK(&glThreadListLock); us = Threads_RemActive(); @@ -92,15 +99,17 @@ int RWLock_AcquireWrite(tRWLock *Lock) Lock->Owner = Proc_GetCurThread(); SHORTREL(&Lock->Protector); } + LOG("Obtained"); return 0; } // Release a mutex void RWLock_Release(tRWLock *Lock) { + LOG("Release RWLock %p", Lock); SHORTLOCK( &Lock->Protector ); - if( Lock->Owner == Proc_GetCurThread() ) + if( Lock->Owner != Proc_GetCurThread() ) Lock->Level --; // Writers first