URW_WRITE_LOCKED
if (rwstate & URW_WRITE_LOCKED) {
if (readers & URW_WRITE_LOCKED) {
if (!(readers & URW_WRITE_LOCKED) &&
rval = ((readers & URW_WRITE_LOCKED) &&
URW_WRITE_LOCKED : (URW_HAS_WAITERS | URW_WRITE_LOCKED);
(URW_WRITE_LOCKED | URW_READERS_MASK) :
(URW_HAS_WAITERS | URW_WRITE_LOCKED | URW_READERS_MASK);
if (atomic_cas_32(rwstate, readers, readers | URW_WRITE_LOCKED)
if (readers & URW_WRITE_LOCKED) /* drop the writer lock */
atomic_and_32(rwstate, ~URW_WRITE_LOCKED);
ASSERT(!((readers) & URW_WRITE_LOCKED) || \
((readers) & ~URW_HAS_WAITERS) == URW_WRITE_LOCKED)
atomic_or_32(rwstate, URW_WRITE_LOCKED);
if (try_flag && (*rwstate & URW_WRITE_LOCKED)) {
if ((readers & URW_WRITE_LOCKED) ||
(*rwstate & URW_WRITE_LOCKED) &&
if (rwstate & URW_WRITE_LOCKED) {
*rwstate |= URW_WRITE_LOCKED;
rwstate |= URW_WRITE_LOCKED;
if (!(rwstate & URW_WRITE_LOCKED)) {
rwstate |= URW_WRITE_LOCKED;
if (rwstate & URW_WRITE_LOCKED)