On 2013-01-15 15:16:44 -0300, Alvaro Herrera wrote:
> Andres Freund wrote:
> > On 2013-01-15 09:56:41 -0300, Alvaro Herrera wrote:
> > > Andres Freund wrote:
> > > > On 2013-01-15 01:00:00 -0300, Alvaro Herrera wrote:
> > > > > Andres Freund wrote:
> > > > > 
> > > > > I've been giving a couple of these parts a look.  In particular
> > > > > 
> > > > > > [03] Split out xlog reading into its own module called xlogreader
> > > > > 
> > > > > Cleaned this one up a bit last week.  I will polish it some more,
> > > > > publish for some final comments, and commit.
> > > > 
> > > > I have some smaller bugfixes in my current version that you probably
> > > > don't have yet (on grounds of being fixed this weekend)... So we need to
> > > > be a bit careful not too loose those.
> > > 
> > > Sure.  Do you have them as individual commits?  I'm assuming you rebased
> > > the tree.  Maybe in your reflog?  IIRC I also have at least one minor
> > > bug fix.
> > 
> > I can check, which commit did you base your modifications on?
> 
> Dunno.  It's probably easier to reverse-apply the version you submitted
> to see what changed, and then forward-apply again.

There's at least the two attached patches...

Greetings,

Andres Freund

-- 
 Andres Freund                     http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services
>From 5ca4b81f03bd7a4bf5101bd68811548023ac12fe Mon Sep 17 00:00:00 2001
From: Andres Freund <and...@anarazel.de>
Date: Mon, 14 Jan 2013 21:43:13 +0100
Subject: [PATCH] xlogreader: fix

---
 src/backend/access/transam/xlogreader.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c
index 6a420e6..9439c05 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -350,7 +350,7 @@ XLogReadRecord(XLogReaderState *state, XLogRecPtr RecPtr, char **errormsg)
 
 			/* Wait for the next page to become available */
 			readOff = ReadPageInternal(state, targetPagePtr,
-									   Min(len, XLOG_BLCKSZ));
+									   Min(total_len - gotlen + SizeOfXLogShortPHD, XLOG_BLCKSZ));
 
 			if (readOff < 0)
 				goto err;
@@ -383,6 +383,11 @@ XLogReadRecord(XLogReaderState *state, XLogRecPtr RecPtr, char **errormsg)
 
 			/* Append the continuation from this page to the buffer */
 			pageHeaderSize = XLogPageHeaderSize(pageHeader);
+
+			if (readOff < pageHeaderSize)
+				readOff = ReadPageInternal(state, targetPagePtr,
+										   pageHeaderSize);
+
 			Assert(pageHeaderSize <= readOff);
 
 			contdata = (char *) state->readBuf + pageHeaderSize;
@@ -390,6 +395,10 @@ XLogReadRecord(XLogReaderState *state, XLogRecPtr RecPtr, char **errormsg)
 			if (pageHeader->xlp_rem_len < len)
 				len = pageHeader->xlp_rem_len;
 
+			if (readOff < (pageHeaderSize + len))
+				readOff = ReadPageInternal(state, targetPagePtr,
+										   pageHeaderSize + len);
+
 			memcpy(buffer, (char *) contdata, len);
 			buffer += len;
 			gotlen += len;
-- 
1.7.12.289.g0ce9864.dirty

>From 995d723239df325b48412878fa818c94cb33f724 Mon Sep 17 00:00:00 2001
From: Andres Freund <and...@anarazel.de>
Date: Tue, 15 Jan 2013 00:58:49 +0100
Subject: [PATCH] xlogreader: use correct type

---
 src/backend/access/transam/xlogreader.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c
index 9439c05..f2b9355 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -927,7 +927,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr)
    uint32      pageHeaderSize;
    XLogPageHeader header;
    XLogRecord *record;
-   uint32 readLen;
+   int readLen;
    char       *errormsg;
 
    if (RecPtr == InvalidXLogRecPtr)
-- 
1.7.12.289.g0ce9864.dirty

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to