URW_HAS_WAITERS
if (rwstate & URW_HAS_WAITERS)
URW_WRITE_LOCKED : (URW_HAS_WAITERS | URW_WRITE_LOCKED);
while (((readers = *rwstate) & URW_HAS_WAITERS) == 0) {
(URW_HAS_WAITERS | URW_WRITE_LOCKED | URW_READERS_MASK);
while (((readers = *rwstate) & URW_HAS_WAITERS) == 0) {
if (!(readers & URW_HAS_WAITERS)) { /* no waiters */
ASSERT(readers & URW_HAS_WAITERS);
((readers) & ~URW_HAS_WAITERS) == URW_WRITE_LOCKED)
ASSERT((*rwstate & ~URW_HAS_WAITERS) == 0);
atomic_and_32(rwstate, ~URW_HAS_WAITERS);
atomic_or_32(rwstate, URW_HAS_WAITERS);
atomic_or_32(rwstate, URW_HAS_WAITERS);
atomic_and_32(rwstate, ~URW_HAS_WAITERS);
atomic_and_32(rwstate, ~URW_HAS_WAITERS);
atomic_and_32(rwstate, ~URW_HAS_WAITERS);
si_p->si_has_waiters = ((rwstate & URW_HAS_WAITERS) != 0);
*rwstate &= URW_HAS_WAITERS;
rwstate |= URW_HAS_WAITERS;
rwstate |= URW_HAS_WAITERS;
rwstate |= URW_HAS_WAITERS;