diff --git a/src/backend/access/transam/generic_xlog.c b/src/backend/access/transam/generic_xlog.c index 5164a1c..59d5466 100644 --- a/src/backend/access/transam/generic_xlog.c +++ b/src/backend/access/transam/generic_xlog.c @@ -117,7 +117,7 @@ writeFragment(PageData *pageData, OffsetNumber offset, OffsetNumber length, */ static void computeRegionDelta(PageData *pageData, - const char *curpage, const char *targetpage, + const char *currPage, const char *targetPage, int targetStart, int targetEnd, int validStart, int validEnd) { @@ -125,6 +125,13 @@ computeRegionDelta(PageData *pageData, loopEnd, fragmentBegin = -1, fragmentEnd = -1; + int64* curpage = (int64*)currPage; + int64* targetpage = (int64*)targetPage; + + targetStart >>= 3; + validStart >>= 3; + targetEnd = (targetEnd + 7) >> 3; + validEnd = (validEnd + 7) >> 3; /* Deal with any invalid start region by including it in first fragment */ if (validStart > targetStart) @@ -189,11 +196,11 @@ computeRegionDelta(PageData *pageData, * fragmentEnd value, which is why it's OK that we unconditionally * assign "fragmentEnd = i" above. */ - if (fragmentBegin >= 0 && i - fragmentEnd > MATCH_THRESHOLD) + if (fragmentBegin >= 0 && (i - fragmentEnd)*8 > MATCH_THRESHOLD) { - writeFragment(pageData, fragmentBegin, - fragmentEnd - fragmentBegin, - targetpage + fragmentBegin); + writeFragment(pageData, fragmentBegin*8, + (fragmentEnd - fragmentBegin)*8, + targetPage + fragmentBegin*8); fragmentBegin = -1; fragmentEnd = -1; /* not really necessary */ } @@ -212,9 +219,9 @@ computeRegionDelta(PageData *pageData, { if (fragmentEnd < 0) fragmentEnd = targetEnd; - writeFragment(pageData, fragmentBegin, - fragmentEnd - fragmentBegin, - targetpage + fragmentBegin); + writeFragment(pageData, fragmentBegin*8, + (fragmentEnd - fragmentBegin)*8, + targetPage + fragmentBegin*8); } }