From 8f1913ec7ff3809d11adf1611aba57e44cb42a82 Mon Sep 17 00:00:00 2001 From: Kyotaro Horiguchi Date: Thu, 18 Jun 2020 10:55:49 +0900 Subject: [PATCH 1/3] 001 --- src/backend/replication/slot.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index b94e11a8e7..dcc76c4783 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -412,6 +412,14 @@ retry: */ if (IsUnderPostmaster) { + /* + * Get ready to sleep on it in case it is active if needed. + * (We may end up not sleeping, but we don't want to do this while + * holding the spinlock.) + */ + if (behavior != SAB_Inquire) + ConditionVariablePrepareToSleep(&s->active_cv); + SpinLockAcquire(&s->mutex); if (s->active_pid == 0) s->active_pid = MyProcPid; @@ -438,12 +446,13 @@ retry: return active_pid; /* Wait here until we get signaled, and then restart */ - ConditionVariablePrepareToSleep(&s->active_cv); ConditionVariableSleep(&s->active_cv, WAIT_EVENT_REPLICATION_SLOT_DROP); ConditionVariableCancelSleep(); goto retry; } + else if (behavior != SAB_Inquire) + ConditionVariableCancelSleep(); /* Let everybody know we've modified this slot */ ConditionVariableBroadcast(&s->active_cv); -- 2.18.4