• Tom Lane's avatar
    Allow ConditionVariable[PrepareTo]Sleep to auto-switch between CVs. · 13db3b93
    Tom Lane authored
    The original coding here insisted that callers manually cancel any prepared
    sleep for one condition variable before starting a sleep on another one.
    While that's not a huge burden today, it seems like a gotcha that will bite
    us in future if the use of condition variables increases; anything we can
    do to make the use of this API simpler and more robust is attractive.
    Hence, allow these functions to automatically switch their attention to
    a different CV when required.  This is safe for the same reason it was OK
    for commit aced5a92 to let a broadcast operation cancel any prepared CV
    sleep: whenever we return to the other test-and-sleep loop, we will
    automatically re-prepare that CV, paying at most an extra test of that
    loop's exit condition.
    
    Back-patch to v10 where condition variables were introduced.  Ordinarily
    we would probably not back-patch a change like this, but since it does not
    invalidate any coding pattern that was legal before, it seems safe enough.
    Furthermore, there's an open bug in replorigin_drop() for which the
    simplest fix requires this.  Even if we chose to fix that in some more
    complicated way, the hazard would remain that we might back-patch some
    other bug fix that requires this behavior.
    
    Patch by me, reviewed by Thomas Munro.
    
    Discussion: https://postgr.es/m/2437.1515368316@sss.pgh.pa.us
    13db3b93
condition_variable.h 2.46 KB