Zebediah Figura (@zfigura) commented about dlls/ntdll/sync.c:
if (!old.s.owners)
{
/* Not locked exclusive or shared. We can try to grab it. */
new.s.owners = -1;
--new.s.exclusive_waiters;
wait = FALSE;
}
else
{
wait = TRUE;
}
} while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l);
- TRACE("new = %p, #owners = %ld\n", new.Ptr, shared_owner_count);
- read.Ptr = InterlockedCompareExchangePointer(&lock->Ptr, new.Ptr, expected.Ptr);
- if (read.Ptr != expected.Ptr)
This part I do hate, though. Do we really need srwlock_wake() to work without the spinlock held? We're already holding it in srwlock_maybe_wake() anyway...