• Thomas Munro's avatar
    Don't reset latch in ConditionVariablePrepareToSleep(). · 78aaa0e8
    Thomas Munro authored
    It's not OK to do that without calling CHECK_FOR_INTERRUPTS().
    Let the next wait loop deal with it, following the usual pattern.
    
    One consequence of this bug was that a SIGTERM delivered in a very
    narrow timing window could leave a parallel worker process waiting
    forever for a condition variable that will never be signaled, after
    an error was raised in other process.
    
    The code is a bit different in the stable branches due to commit
    1321509f, making problems less likely there.  No back-patch for now,
    but we may finish up deciding to make a similar change after more
    discussion.
    
    Author: Thomas Munro
    Reviewed-by: Shawn Debnath
    Reported-by: Tomas Vondra
    Discussion: https://postgr.es/m/CA%2BhUKGJOm8zZHjVA8svoNT3tHY0XdqmaC_kHitmgXDQM49m1dA%40mail.gmail.com
    78aaa0e8
condition_variable.c 12.4 KB