The attached patches against 7.3 and 7.4 fix a subtraction carry bug in
xlog.c.
--
John Nield
[EMAIL PROTECTED]
Index: pgsql-server-7_3/src/backend/access/transam/xlog.c
diff -c pgsql-server-7_3/src/backend/access/transam/xlog.c:1.1.1.1
pgsql-server-7_3/src/backend/access/transam/xlog.c:1.1.1.1.2.2
*** pgsql-server-7_3/src/backend/access/transam/xlog.c:1.1.1.1 Thu Jun 19 14:25:08
2003
--- pgsql-server-7_3/src/backend/access/transam/xlog.c Thu Jun 19 18:21:54 2003
***************
*** 354,362 ****
logSeg = (xlrp).xrecoff / XLogSegSize \
)
#define XLByteToPrevSeg(xlrp, logId, logSeg) \
! ( logId = (xlrp).xlogid, \
! logSeg = ((xlrp).xrecoff - 1) / XLogSegSize \
! )
/*
* Is an XLogRecPtr within a particular XLOG segment?
--- 354,366 ----
logSeg = (xlrp).xrecoff / XLogSegSize \
)
#define XLByteToPrevSeg(xlrp, logId, logSeg) \
! do { \
! logId = (xlrp).xlogid; \
! if ( (xlrp).xrecoff == 0 ) \
! { logId--; logSeg = XLogSegsPerFile - 1; } \
! else \
! logSeg = ((xlrp).xrecoff - 1) / XLogSegSize; \
! } while (0)
/*
* Is an XLogRecPtr within a particular XLOG segment?
***************
*** 369,376 ****
(xlrp).xrecoff / XLogSegSize == (logSeg))
#define XLByteInPrevSeg(xlrp, logId, logSeg) \
! ((xlrp).xlogid == (logId) && \
! ((xlrp).xrecoff - 1) / XLogSegSize == (logSeg))
#define XLogFileName(path, log, seg) \
--- 373,384 ----
(xlrp).xrecoff / XLogSegSize == (logSeg))
#define XLByteInPrevSeg(xlrp, logId, logSeg) \
! ( \
! ((xlrp).xrecoff == 0)? \
! ((xlrp).xlogid - 1 == (logId) && (XLogSegsPerFile - 1) == logSeg): \
! ((xlrp).xlogid == (logId) && \
! ((xlrp).xrecoff - 1) / XLogSegSize ==
(logSeg)) \
! )
#define XLogFileName(path, log, seg) \
*** src/backend/access/transam/xlog.c.orig Fri Jun 20 09:04:20 2003
--- src/backend/access/transam/xlog.c Fri Jun 20 09:10:04 2003
***************
*** 354,362 ****
logSeg = (xlrp).xrecoff / XLogSegSize \
)
#define XLByteToPrevSeg(xlrp, logId, logSeg) \
! ( logId = (xlrp).xlogid, \
! logSeg = ((xlrp).xrecoff - 1) / XLogSegSize \
! )
/*
* Is an XLogRecPtr within a particular XLOG segment?
--- 354,366 ----
logSeg = (xlrp).xrecoff / XLogSegSize \
)
#define XLByteToPrevSeg(xlrp, logId, logSeg) \
! do { \
! logId = (xlrp).xlogid; \
! if ( (xlrp).xrecoff == 0 ) \
! { logId--; logSeg = XLogSegsPerFile - 1; } \
! else \
! logSeg = ((xlrp).xrecoff - 1) / XLogSegSize; \
! } while (0)
/*
* Is an XLogRecPtr within a particular XLOG segment?
***************
*** 369,376 ****
(xlrp).xrecoff / XLogSegSize == (logSeg))
#define XLByteInPrevSeg(xlrp, logId, logSeg) \
! ((xlrp).xlogid == (logId) && \
! ((xlrp).xrecoff - 1) / XLogSegSize == (logSeg))
#define XLogFileName(path, log, seg) \
--- 373,384 ----
(xlrp).xrecoff / XLogSegSize == (logSeg))
#define XLByteInPrevSeg(xlrp, logId, logSeg) \
! ( \
! ((xlrp).xrecoff == 0)? \
! ((xlrp).xlogid - 1 == (logId) && (XLogSegsPerFile - 1) == logSeg): \
! ((xlrp).xlogid == (logId) && \
! ((xlrp).xrecoff - 1) / XLogSegSize == (logSeg)) \
! )
#define XLogFileName(path, log, seg) \
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])