Zebediah Figura (@zfigura) commented about dlls/ntdll/sync.c:
if ((tag & SRWLOCK_TAG_LOCKED) && (shared_count == 0 || (tag & SRWLOCK_TAG_HAS_WAITERS)))
return FALSE;
/* The lock is either locked shared, or not locked at all. We can try to grab it. */
if (tag & SRWLOCK_TAG_HAS_WAITERS)
new = srwlock_from_waiter(last, tag | SRWLOCK_TAG_LOCKED); else
{
ret = FALSE;
}
- } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l);
new = srwlock_from_shared_owner_count(shared_count + 1,
tag | SRWLOCK_TAG_LOCKED);
- } while (InterlockedCompareExchangePointer(&lock->Ptr, new.Ptr,
old->Ptr ) != old->Ptr);
Style nitpick, but these line wrappings are a little jarring to read, especially when you have lines longer than these would be unwrapped.