RW_WRITE_WANTED
if ((owner & (RW_WRITE_LOCKED | RW_WRITE_WANTED)) == 0) {
if ((owner & (RW_WRITE_LOCKED | RW_WRITE_WANTED)) != 0)
owner | RW_HAS_WAITERS | RW_WRITE_WANTED);
new |= RW_HAS_WAITERS | RW_WRITE_WANTED;
set = RW_HAS_WAITERS | RW_WRITE_WANTED;
newval = (owner & ~(RW_HAS_WAITERS | RW_WRITE_WANTED)) | set;
need_wait = RW_WRITE_LOCKED | RW_WRITE_WANTED;
set_wait = RW_HAS_WAITERS | RW_WRITE_WANTED;
~RW_WRITE_WANTED);
RW_ASSERT(rw, (owner & RW_WRITE_WANTED) != 0);
newown |= RW_WRITE_WANTED;
newown |= RW_WRITE_WANTED;
newown |= RW_HAS_WAITERS | RW_WRITE_WANTED;
need_wait = RW_WRITE_LOCKED | RW_WRITE_WANTED;
RW_ASSERT(rw, (rw->rw_owner & RW_WRITE_WANTED) != 0);
RW_WRITE_WANTED;
newown |= RW_HAS_WAITERS | RW_WRITE_WANTED;