osi_assert(lockp->readers == 0 && (lockp->flags & OSI_LOCKFLAG_EXCL));
} else {
/* if we're here, all clear to set the lock */
- lockp->flags |= OSI_LOCKFLAG_EXCL;
+ _InterlockedOr(&lockp->flags, OSI_LOCKFLAG_EXCL);
lockp->tid[0] = tid;
}
osi_assertx(lockp->readers == 0, "write lock readers present");
osi_assertx(lockp->tid[0] == thrd_Current(), "write lock not held by current thread");
lockp->tid[0] = 0;
- lockp->flags &= ~OSI_LOCKFLAG_EXCL;
+ _InterlockedAnd( &lockp->flags, ~OSI_LOCKFLAG_EXCL);
if (lockp->waiters) {
osi_TSignalForMLs(&lockp->d.turn, 0, csp);
}
osi_assertx(lockp->tid[0] == thrd_Current(), "write lock not held by current thread");
/* convert write lock to read lock */
- lockp->flags &= ~OSI_LOCKFLAG_EXCL;
+ _InterlockedAnd(&lockp->flags, ~OSI_LOCKFLAG_EXCL);
lockp->tid[0] = 0;
lockp->readers++;
if (--(lockp->readers) == 0) {
/* convert read lock to write lock */
- lockp->flags |= OSI_LOCKFLAG_EXCL;
+ _InterlockedOr(&lockp->flags, OSI_LOCKFLAG_EXCL);
lockp->tid[0] = tid;
} else {
osi_assertx(lockp->readers > 0, "read lock underflow");
osi_assert(lockp->flags & OSI_LOCKFLAG_EXCL);
} else {
/* if we're here, all clear to set the lock */
- lockp->flags |= OSI_LOCKFLAG_EXCL;
+ _InterlockedOr(&lockp->flags, OSI_LOCKFLAG_EXCL);
lockp->tid = thrd_Current();
}
osi_assertx(lockp->flags & OSI_LOCKFLAG_EXCL, "mutex not held");
osi_assertx(lockp->tid == thrd_Current(), "mutex not held by current thread");
- lockp->flags &= ~OSI_LOCKFLAG_EXCL;
+ _InterlockedAnd(&lockp->flags, ~OSI_LOCKFLAG_EXCL);
lockp->tid = 0;
if (lockp->waiters) {
osi_TSignalForMLs(&lockp->d.turn, 0, csp);
}
else {
/* if we're here, all clear to set the lock */
- lockp->flags |= OSI_LOCKFLAG_EXCL;
+ _InterlockedOr(&lockp->flags, OSI_LOCKFLAG_EXCL);
lockp->tid[0] = thrd_Current();
i = 1;
}
}
else {
/* if we're here, all clear to set the lock */
- lockp->flags |= OSI_LOCKFLAG_EXCL;
+ _InterlockedOr(&lockp->flags, OSI_LOCKFLAG_EXCL);
lockp->tid = thrd_Current();
i = 1;
}
osi_assertx(lockp->flags & OSI_LOCKFLAG_EXCL, "osi_SleepW: not held");
- lockp->flags &= ~OSI_LOCKFLAG_EXCL;
+ _InterlockedAnd(&lockp->flags, ~OSI_LOCKFLAG_EXCL);
lockp->tid[0] = 0;
if (lockp->waiters) {
osi_TSignalForMLs(&lockp->d.turn, 0, NULL);
osi_assertx(lockp->flags & OSI_LOCKFLAG_EXCL, "osi_SleepM not held");
- lockp->flags &= ~OSI_LOCKFLAG_EXCL;
+ _InterlockedAnd(&lockp->flags, ~OSI_LOCKFLAG_EXCL);
lockp->tid = 0;
if (lockp->waiters) {
osi_TSignalForMLs(&lockp->d.turn, 0, NULL);