]> granicus.if.org Git - postgresql/commitdiff
Initialize shared memory copy of ckptXidEpoch correctly when not in recovery.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 29 Jun 2012 16:19:29 +0000 (19:19 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 29 Jun 2012 16:23:16 +0000 (19:23 +0300)
This bug was introduced by commit 20d98ab6e4110087d1816cd105a40fcc8ce0a307,
so backpatch this to 9.0-9.2 like that one.

This fixes bug #6710, reported by Tarvi Pillessaar

src/backend/access/transam/xlog.c

index 898899374658a39bc3f9a0db849950bb1dcfe99b..1612f44e4eccd624f978223b7b06d1000b715db9 100644 (file)
@@ -6252,11 +6252,14 @@ StartupXLOG(void)
                ereport(PANIC,
                                (errmsg("invalid next transaction ID")));
 
+       /* initialize shared memory variables from the checkpoint record */
        ShmemVariableCache->nextXid = checkPoint.nextXid;
        ShmemVariableCache->nextOid = checkPoint.nextOid;
        ShmemVariableCache->oidCount = 0;
        MultiXactSetNextMXact(checkPoint.nextMulti, checkPoint.nextMultiOffset);
        SetTransactionIdLimit(checkPoint.oldestXid, checkPoint.oldestXidDB);
+       XLogCtl->ckptXidEpoch = checkPoint.nextXidEpoch;
+       XLogCtl->ckptXid = checkPoint.nextXid;
 
        /*
         * We must replay WAL entries using the same TimeLineID they were created
@@ -6340,10 +6343,6 @@ StartupXLOG(void)
                /* No need to hold ControlFileLock yet, we aren't up far enough */
                UpdateControlFile();
 
-               /* initialize shared-memory copy of latest checkpoint XID/epoch */
-               XLogCtl->ckptXidEpoch = ControlFile->checkPointCopy.nextXidEpoch;
-               XLogCtl->ckptXid = ControlFile->checkPointCopy.nextXid;
-
                /* initialize our local copy of minRecoveryPoint */
                minRecoveryPoint = ControlFile->minRecoveryPoint;