mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03:00
Don't reset latch in ConditionVariablePrepareToSleep().
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
This commit is contained in:
parent
05f18c6b6b
commit
78aaa0e823
@ -93,12 +93,6 @@ ConditionVariablePrepareToSleep(ConditionVariable *cv)
|
||||
/* Record the condition variable on which we will sleep. */
|
||||
cv_sleep_target = cv;
|
||||
|
||||
/*
|
||||
* Reset my latch before adding myself to the queue, to ensure that we
|
||||
* don't miss a wakeup that occurs immediately.
|
||||
*/
|
||||
ResetLatch(MyLatch);
|
||||
|
||||
/* Add myself to the wait queue. */
|
||||
SpinLockAcquire(&cv->mutex);
|
||||
proclist_push_tail(&cv->wakeup, pgprocno, cvWaitLink);
|
||||
|
Loading…
x
Reference in New Issue
Block a user