X-Git-Url: https://git.openafs.org/?p=openafs.git;a=blobdiff_plain;f=src%2FWINNT%2Fclient_osi%2Fosibasel.c;h=20444f815c3f6063fce2bbba447e4a597f75f0c2;hp=351a6f78f115d15a205062710d39b0b37d80d610;hb=2b6a8d384bd4426a61c72e79c34ffd75a03e612e;hpb=2cdd59d8f318193d0ef7937910466531caf1c963 diff --git a/src/WINNT/client_osi/osibasel.c b/src/WINNT/client_osi/osibasel.c index 351a6f7..20444f8 100644 --- a/src/WINNT/client_osi/osibasel.c +++ b/src/WINNT/client_osi/osibasel.c @@ -311,8 +311,10 @@ void lock_ReleaseRead(osi_rwlock_t *lockp) } } - /* releasing a read lock can allow readers or writers */ - if (--(lockp->readers) == 0 && !osi_TEmpty(&lockp->d.turn)) { + lockp->readers--; + + /* releasing a read lock can allow writers */ + if (lockp->readers == 0 && lockp->waiters) { osi_TSignalForMLs(&lockp->d.turn, 0, csp); } else { @@ -365,7 +367,7 @@ void lock_ReleaseWrite(osi_rwlock_t *lockp) lockp->tid[0] = 0; lockp->flags &= ~OSI_LOCKFLAG_EXCL; - if (!osi_TEmpty(&lockp->d.turn)) { + if (lockp->waiters) { osi_TSignalForMLs(&lockp->d.turn, 0, csp); } else { @@ -398,7 +400,7 @@ void lock_ConvertWToR(osi_rwlock_t *lockp) osi_assertx(lockp->readers == 1, "read lock not one"); - if (!osi_TEmpty(&lockp->d.turn)) { + if (lockp->waiters) { osi_TSignalForMLs(&lockp->d.turn, /* still have readers */ 1, csp); } else { @@ -541,7 +543,7 @@ void lock_ReleaseMutex(struct osi_mutex *lockp) lockp->flags &= ~OSI_LOCKFLAG_EXCL; lockp->tid = 0; - if (!osi_TEmpty(&lockp->d.turn)) { + if (lockp->waiters) { osi_TSignalForMLs(&lockp->d.turn, 0, csp); } else { @@ -753,7 +755,7 @@ void osi_SleepR(LONG_PTR sleepVal, struct osi_rwlock *lockp) /* XXX better to get the list of things to wakeup from TSignalForMLs, and * then do the wakeup after SleepSpin releases the low-level mutex. */ - if (--(lockp->readers) == 0 && !osi_TEmpty(&lockp->d.turn)) { + if (--(lockp->readers) == 0 && lockp->waiters) { osi_TSignalForMLs(&lockp->d.turn, 0, NULL); } @@ -799,7 +801,7 @@ void osi_SleepW(LONG_PTR sleepVal, struct osi_rwlock *lockp) lockp->flags &= ~OSI_LOCKFLAG_EXCL; lockp->tid[0] = 0; - if (!osi_TEmpty(&lockp->d.turn)) { + if (lockp->waiters) { osi_TSignalForMLs(&lockp->d.turn, 0, NULL); } @@ -844,7 +846,7 @@ void osi_SleepM(LONG_PTR sleepVal, struct osi_mutex *lockp) lockp->flags &= ~OSI_LOCKFLAG_EXCL; lockp->tid = 0; - if (!osi_TEmpty(&lockp->d.turn)) { + if (lockp->waiters) { osi_TSignalForMLs(&lockp->d.turn, 0, NULL); }