aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2012-06-29 19:19:29 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2012-06-29 19:32:15 +0300
commit7a5c9ca93ad7d9b84f612d6157bf8990c7041d3c (patch)
treed1a433d2ef24cc65099a072ad76707090c28bd6d /src
parent4741e9afb93f0d769655b2d18c2b73b86f281010 (diff)
downloadpostgresql-7a5c9ca93ad7d9b84f612d6157bf8990c7041d3c.tar.gz
postgresql-7a5c9ca93ad7d9b84f612d6157bf8990c7041d3c.zip
Initialize shared memory copy of ckptXidEpoch correctly when not in recovery.
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/transam/xlog.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 72c6e2061fa..a1215a0b8cf 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -6227,11 +6227,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
@@ -6330,10 +6333,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;