• Tom Lane's avatar
    Reorder steps in ConditionVariablePrepareToSleep for more safety. · 3cac0ec8
    Tom Lane authored
    In the admittedly-very-unlikely case that AddWaitEventToSet fails,
    ConditionVariablePrepareToSleep would error out after already having
    set cv_sleep_target, which is probably bad, and after having already
    set cv_wait_event_set, which is very bad.  Transaction abort might or
    might not clean up cv_sleep_target properly; but there is nothing
    that would be aware that the WaitEventSet wasn't fully constructed,
    so that all future condition variable sleeps would be broken.
    We can easily guard against these hazards with slight restructuring.
    
    Back-patch to v10 where condition_variable.c was introduced.
    
    Discussion: https://postgr.es/m/CAEepm=0NWKehYw7NDoUSf8juuKOPRnCyY3vuaSvhrEWsOTAa3w@mail.gmail.com
    3cac0ec8
condition_variable.c 9.74 KB