postgres.git / summary / log / commit / refs
commit 3f3d60d3bbd10f6cc118d24aadc60e96b9854576
Author: Robert Haas <rhaas@postgresql.org>
Date: Thu Feb 09 19:42:32 2017 +0000
Fix race condition in ConditionVariablePrepareToSleep.
Thomas Munro
src/backend/storage/lmgr/condition_variable.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/backend/storage/lmgr/condition_variable.c b/src/backend/storage/lmgr/condition_variable.c
index 67fe177a7dd..6f1ef0b7e55 100644
--- a/src/backend/storage/lmgr/condition_variable.c
+++ b/src/backend/storage/lmgr/condition_variable.c
@@ -71,14 +71,17 @@ ConditionVariablePrepareToSleep(ConditionVariable *cv)
&MyProc->procLatch, NULL);
}
+ /*
+ * Reset my latch before adding myself to the queue and before entering
+ * the caller's predicate loop.
+ */
+ ResetLatch(&MyProc->procLatch);
+
/* Add myself to the wait queue. */
SpinLockAcquire(&cv->mutex);
if (!proclist_contains(&cv->wakeup, pgprocno, cvWaitLink))
proclist_push_tail(&cv->wakeup, pgprocno, cvWaitLink);
SpinLockRelease(&cv->mutex);
-
- /* Reset my latch before entering the caller's predicate loop. */
- ResetLatch(&MyProc->procLatch);
}
/*--------------------------------------------------------------------------
[parent: fc8219dc54c9]