diff options
author | Michael Paquier | 2018-06-11 21:52:34 +0000 |
---|---|---|
committer | Michael Paquier | 2018-06-11 21:52:34 +0000 |
commit | f8795d2ec8632a7242896e0f8322d13bfe922512 (patch) | |
tree | 14bc8da59f6754410b68e2cf684417f36f5329fd | |
parent | 69025c5a07a10c842bfbcb62d4af1221e5ce7e85 (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.c | 7 |
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); } |