From: Heikki Linnakangas Date: Mon, 12 May 2014 14:18:28 +0000 (+0300) Subject: hot standby fix X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=ab289a925fdcbf883ff8ed1f251f97403fc7a941;p=users%2Fheikki%2Fpostgres.git hot standby fix --- diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 7d8f6dcfd1..dcd7b805b4 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -10255,8 +10255,6 @@ do_pg_abort_backup(void) /* * Get latest redo apply position. - * - * Exported to allow WALReceiver to read the pointer directly. */ XLogRecPtr GetXLogReplayRecPtr(TimeLineID *replayTLI) diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c index 15a433be0d..a77b724c7a 100644 --- a/src/backend/storage/ipc/procarray.c +++ b/src/backend/storage/ipc/procarray.c @@ -735,16 +735,22 @@ GetSnapshotData(Snapshot snapshot) { TransactionId xmax, xmin; - - XLogRecPtr snapshotlsn; + XLogRecPtr snapshotlsn; + bool takenDuringRecovery; Assert(snapshot != NULL); - snapshot->takenDuringRecovery = RecoveryInProgress(); + takenDuringRecovery = RecoveryInProgress(); LWLockAcquire(ProcArrayLock, LW_SHARED); - snapshotlsn = GetXLogInsertRecPtr(); + if (takenDuringRecovery) + { + TimeLineID tli; + snapshotlsn = GetXLogReplayRecPtr(&tli); + } + else + snapshotlsn = GetXLogInsertRecPtr(); if (MyPgXact->snapshotlsn == InvalidXLogRecPtr) MyPgXact->snapshotlsn = snapshotlsn; @@ -761,6 +767,7 @@ GetSnapshotData(Snapshot snapshot) snapshot->xmax = xmax; snapshot->snapshotlsn = snapshotlsn; snapshot->curcid = GetCurrentCommandId(false); + snapshot->takenDuringRecovery = takenDuringRecovery; /* * Update global variables too