From: Heikki Linnakangas Date: Fri, 29 Jun 2012 16:19:29 +0000 (+0300) Subject: Initialize shared memory copy of ckptXidEpoch correctly when not in recovery. X-Git-Tag: REL9_3_BETA1~1273 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7a5c9ca93ad7d9b84f612d6157bf8990c7041d3c;p=thirdparty%2Fpostgresql.git 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 --- 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;