Fix calculation of how many segments to retain for wal_keep_segments.

KeepLogSeg function was broken when we switched to use a 64-bit int for the
segment number.

Per report from Jeff Janes.
This commit is contained in:
Heikki Linnakangas 2013-04-08 16:26:52 +03:00
parent 5787c6730e
commit 594041311c

View File

@ -7523,9 +7523,9 @@ CreateRestartPoint(int flags)
}
/*
* Calculate the last segment that we need to retain because of
* wal_keep_segments, by subtracting wal_keep_segments from
* the given xlog location, recptr.
* Retreat *logSegNo to the last segment that we need to retain because of
* wal_keep_segments. This is calculated by subtracting wal_keep_segments
* from the given xlog location, recptr.
*/
static void
KeepLogSeg(XLogRecPtr recptr, XLogSegNo *logSegNo)
@ -7541,7 +7541,7 @@ KeepLogSeg(XLogRecPtr recptr, XLogSegNo *logSegNo)
if (segno <= wal_keep_segments)
segno = 1;
else
segno = *logSegNo - wal_keep_segments;
segno = segno - wal_keep_segments;
/* don't delete WAL segments newer than the calculated segment */
if (segno < *logSegNo)