> I believe it refers to the state of the lock prior to lock acquisition; not prior to subtraction.
That definitely makes sense as a way to read this variable in context, but after reviewing other usages of old_state in lwlock.c, I tend to think that this is an outlier usage and maybe the naming was just copy-pasted from one of the other compare-and-swaps, which tend to use "old state" to mean "the state just before we mutated it.". Here are three other usages that make me think this: First, in LWLockWaitListLock, we have: old_state = pg_atomic_fetch_or_u32(&lock->state, LW_FLAG_LOCKED); Here old_state contains the lock state *before* the compare and swap, the opposite of the case we considered above, but it does also work out to "the state prior to lock acquisition". Next, in LWLockWaitListUnlock, we have: old_state = pg_atomic_fetch_and_u32(&lock->state, ~LW_FLAG_LOCKED); Assert(old_state & LW_FLAG_LOCKED); ... so in this case "old_state" means "the locked state just prior to the unlock." Third, In LWLockWaitListUnlock, we have: old_state = pg_atomic_read_u32(&lock->state); which also refers to the locked state, prior to maybe being unlocked. I want to say that in these 3 other examples, we are generally using "old_state" to refer to "the state immediately prior to locally mutating it," which can sometimes mean a locked and sometimes unlocked state. To me, that's why the usage in LWLockRelease feels a little confusing, since it is referring to "the state after we mutate it, but corresponding to an older semantic state." > But the name "newstate" wouldn't be great, either. > I don't have a great name in mind, so perhaps a comment instead? Hmm, maybe "unlocked_state" would be a better name in LWLockRelease, when considered across these examples? Alternatively a comment like "Calculate the "old" state, that is, prior to lock acquisition." Regards, Jacob