aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/lmgr/condition_variable.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/backend/storage/lmgr/condition_variable.c b/src/backend/storage/lmgr/condition_variable.c
index 55275cfafcb..cac3d36b6a3 100644
--- a/src/backend/storage/lmgr/condition_variable.c
+++ b/src/backend/storage/lmgr/condition_variable.c
@@ -55,6 +55,21 @@ ConditionVariablePrepareToSleep(ConditionVariable *cv)
int pgprocno = MyProc->pgprocno;
/*
+ * If first time through in this process, create a WaitEventSet, which
+ * we'll reuse for all condition variable sleeps.
+ */
+ if (cv_wait_event_set == NULL)
+ {
+ WaitEventSet *new_event_set;
+
+ new_event_set = CreateWaitEventSet(TopMemoryContext, 1);
+ AddWaitEventToSet(new_event_set, WL_LATCH_SET, PGINVALID_SOCKET,
+ MyLatch, NULL);
+ /* Don't set cv_wait_event_set until we have a correct WES. */
+ cv_wait_event_set = new_event_set;
+ }
+
+ /*
* It's not legal to prepare a sleep until the previous sleep has been
* completed or canceled.
*/
@@ -63,14 +78,6 @@ ConditionVariablePrepareToSleep(ConditionVariable *cv)
/* Record the condition variable on which we will sleep. */
cv_sleep_target = cv;
- /* Create a reusable WaitEventSet. */
- if (cv_wait_event_set == NULL)
- {
- cv_wait_event_set = CreateWaitEventSet(TopMemoryContext, 1);
- AddWaitEventToSet(cv_wait_event_set, WL_LATCH_SET, PGINVALID_SOCKET,
- MyLatch, NULL);
- }
-
/*
* Reset my latch before adding myself to the queue and before entering
* the caller's predicate loop.