diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index d3e623b845..31e12e4043 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -714,6 +714,7 @@ ReplicationSlotsComputeRequiredXmin(bool already_locked) ReplicationSlot *s = &ReplicationSlotCtl->replication_slots[i]; TransactionId effective_xmin; TransactionId effective_catalog_xmin; + XLogRecPtr restart_lsn; if (!s->in_use) continue; @@ -721,8 +722,13 @@ ReplicationSlotsComputeRequiredXmin(bool already_locked) SpinLockAcquire(&s->mutex); effective_xmin = s->effective_xmin; effective_catalog_xmin = s->effective_catalog_xmin; + restart_lsn = s->data.restart_lsn; SpinLockRelease(&s->mutex); + /* is slot still relevant? */ + if (restart_lsn == InvalidXLogRecPtr) + continue; + /* check the data xmin */ if (TransactionIdIsValid(effective_xmin) && (!TransactionIdIsValid(agg_xmin) ||