aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2020-01-28 15:28:36 +1300
committerThomas Munro <tmunro@postgresql.org>2020-01-28 15:28:36 +1300
commit78aaa0e82335527b8cc91601c98c9abbbc3ef3ee (patch)
treeb606f2b34a137a2110eaa06adc1a571ca51e58d6 /src
parent05f18c6b6b6e4b44302ee20a042cedc664532aa2 (diff)
downloadpostgresql-78aaa0e82335527b8cc91601c98c9abbbc3ef3ee.tar.gz
postgresql-78aaa0e82335527b8cc91601c98c9abbbc3ef3ee.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/lmgr/condition_variable.c6
1 files changed, 0 insertions, 6 deletions
diff --git a/src/backend/storage/lmgr/condition_variable.c b/src/backend/storage/lmgr/condition_variable.c
index 0e7f07961ee..37b6a4eecdb 100644
--- a/src/backend/storage/lmgr/condition_variable.c
+++ b/src/backend/storage/lmgr/condition_variable.c
@@ -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);