diff --git a/contrib/pg_resetxlog/pg_resetxlog.c b/contrib/pg_resetxlog/pg_resetxlog.c index 7889cdcf3333f5ec595fb95a98a83825b473a259..7957c957e3806861705978f3182b7d911315e518 100644 --- a/contrib/pg_resetxlog/pg_resetxlog.c +++ b/contrib/pg_resetxlog/pg_resetxlog.c @@ -23,7 +23,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/contrib/pg_resetxlog/Attic/pg_resetxlog.c,v 1.11 2002/01/10 17:51:52 momjian Exp $ + * $Header: /cvsroot/pgsql/contrib/pg_resetxlog/Attic/pg_resetxlog.c,v 1.12 2002/01/10 18:08:29 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -714,32 +714,30 @@ RewriteControlFile(TransactionId set_xid) int fd; char buffer[BLCKSZ]; /* need not be aligned */ - if (set_xid == 0) - { - /* - * Adjust fields as needed to force an empty XLOG starting at the next - * available segment. - */ - newXlogId = ControlFile.logId; - newXlogSeg = ControlFile.logSeg; - /* be sure we wrap around correctly at end of a logfile */ - NextLogSeg(newXlogId, newXlogSeg); - - ControlFile.checkPointCopy.redo.xlogid = newXlogId; - ControlFile.checkPointCopy.redo.xrecoff = - newXlogSeg * XLogSegSize + SizeOfXLogPHD; - ControlFile.checkPointCopy.undo = ControlFile.checkPointCopy.redo; - ControlFile.checkPointCopy.time = time(NULL); - - ControlFile.state = DB_SHUTDOWNED; - ControlFile.time = time(NULL); - ControlFile.logId = newXlogId; - ControlFile.logSeg = newXlogSeg + 1; - ControlFile.checkPoint = ControlFile.checkPointCopy.redo; - ControlFile.prevCheckPoint.xlogid = 0; - ControlFile.prevCheckPoint.xrecoff = 0; - } - else + /* + * Adjust fields as needed to force an empty XLOG starting at the next + * available segment. + */ + newXlogId = ControlFile.logId; + newXlogSeg = ControlFile.logSeg; + /* be sure we wrap around correctly at end of a logfile */ + NextLogSeg(newXlogId, newXlogSeg); + + ControlFile.checkPointCopy.redo.xlogid = newXlogId; + ControlFile.checkPointCopy.redo.xrecoff = + newXlogSeg * XLogSegSize + SizeOfXLogPHD; + ControlFile.checkPointCopy.undo = ControlFile.checkPointCopy.redo; + ControlFile.checkPointCopy.time = time(NULL); + + ControlFile.state = DB_SHUTDOWNED; + ControlFile.time = time(NULL); + ControlFile.logId = newXlogId; + ControlFile.logSeg = newXlogSeg + 1; + ControlFile.checkPoint = ControlFile.checkPointCopy.redo; + ControlFile.prevCheckPoint.xlogid = 0; + ControlFile.prevCheckPoint.xrecoff = 0; + + if (set_xid != 0) ControlFile.checkPointCopy.nextXid = set_xid; /* Contents are protected with a CRC */ @@ -1011,20 +1009,6 @@ main(int argc, char **argv) if (!ReadControlFile()) GuessControlValues(); - /* - * Set XID in pg_control and exit - */ - if (set_xid) - { - if (guessed) - { - printf("\npg_control appears corrupt. Can not update XID.\n"); - exit(1); - } - RewriteControlFile(set_xid); - exit(0); - } - /* * If we had to guess anything, and -f was not given, just print the * guessed values and exit. Also print if -n is given. @@ -1051,7 +1035,7 @@ main(int argc, char **argv) /* * Else, do the dirty deed. */ - RewriteControlFile(0); + RewriteControlFile(set_xid); KillExistingXLOG(); WriteEmptyXLOG();