summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier2018-06-11 21:52:34 +0000
committerMichael Paquier2018-06-11 21:52:34 +0000
commitf8795d2ec8632a7242896e0f8322d13bfe922512 (patch)
tree14bc8da59f6754410b68e2cf684417f36f5329fd
parent69025c5a07a10c842bfbcb62d4af1221e5ce7e85 (diff)
Fix oversight from 9e149c8 with spin-lock handling
Calling an external function while a pin-lock is held is a bad idea as those are designed to be short-lived. The stress of a first commit into a large git history may contribute to that. Reported-by: Andres Freund Discussion: https://postgr.es/m/20180611164952.vmxdpdpirdtkdsz6@alap3.anarazel.de
-rw-r--r--src/backend/replication/slot.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index 79d7a57d677..e8b76b2f207 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -999,6 +999,7 @@ ReplicationSlotReserveWal(void)
while (true)
{
XLogSegNo segno;
+ XLogRecPtr restart_lsn;
/*
* For logical slots log a standby snapshot and start logical decoding
@@ -1016,8 +1017,9 @@ ReplicationSlotReserveWal(void)
XLogRecPtr flushptr;
/* start at current insert position */
+ restart_lsn = GetXLogInsertRecPtr();
SpinLockAcquire(&slot->mutex);
- slot->data.restart_lsn = GetXLogInsertRecPtr();
+ slot->data.restart_lsn = restart_lsn;
SpinLockRelease(&slot->mutex);
/* make sure we have enough information to start */
@@ -1028,8 +1030,9 @@ ReplicationSlotReserveWal(void)
}
else
{
+ restart_lsn = GetRedoRecPtr();
SpinLockAcquire(&slot->mutex);
- slot->data.restart_lsn = GetRedoRecPtr();
+ slot->data.restart_lsn = restart_lsn;
SpinLockRelease(&slot->mutex);
}