hot standby fix
authorHeikki Linnakangas <[email protected]>
Mon, 12 May 2014 14:18:28 +0000 (17:18 +0300)
committerHeikki Linnakangas <[email protected]>
Mon, 12 May 2014 14:20:11 +0000 (17:20 +0300)
src/backend/access/transam/xlog.c
src/backend/storage/ipc/procarray.c

index 7d8f6dcfd1a855e4c1fac44e13655c98ffdce421..dcd7b805b47861241bd1306efe91644250201717 100644 (file)
@@ -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)
index 15a433be0d93b963e2bae951989fad9537ef75d5..a77b724c7aa277d805ff79f8ce5bfe62ae8bf4ba 100644 (file)
@@ -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