I wrote: > I still think that we ought to change the Asserts on cv_sleep_target in > ConditionVariablePrepareToSleep and ConditionVariableSleep to be full > test-and-elog tests. Those are checking a global correctness property > ("global" meaning "interactions between completely unrelated modules can > break this"), and they'd be extremely cheap compared to the rest of what > those functions are doing, so I think insisting that they be Asserts is > penny wise and pound foolish.
Actually ... perhaps a better design would be to have ConditionVariable[PrepareTo]Sleep auto-cancel any prepared sleep for a different condition variable, analogously to what we just did in ConditionVariableBroadcast, on the same theory that whenever control returns to the other CV wait loop it can re-establish the relevant state easily enough. I have to think that if the use of CVs grows much, the existing restriction is going to become untenable anyway, so why not just get rid of it? regards, tom lane