Skip to content

Commit 4ed6fc7

Browse files
author
Artur Zakirov
committed
Fix adjust pd_lower
1 parent 3b411a5 commit 4ed6fc7

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

rumdatapage.c

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -613,8 +613,13 @@ RumPageDeletePostingItem(Page page, OffsetNumber offset)
613613
Assert(offset >= FirstOffsetNumber && offset <= maxoff);
614614

615615
if (offset != maxoff)
616-
memmove(RumDataPageGetItem(page, offset), RumDataPageGetItem(page, offset + 1),
617-
sizeof(PostingItem) * (maxoff - offset));
616+
{
617+
char *dstptr = RumDataPageGetItem(page, offset),
618+
*sourceptr = RumDataPageGetItem(page, offset + 1);
619+
memmove(dstptr, sourceptr, sizeof(PostingItem) * (maxoff - offset));
620+
/* Adjust pd_lower */
621+
((PageHeader) page)->pd_lower = sourceptr - page;
622+
}
618623

619624
RumPageGetOpaque(page)->maxoff--;
620625
}
@@ -1090,11 +1095,21 @@ dataSplitPageInternal(RumBtree btree, Buffer lbuf, Buffer rbuf,
10901095
RumInitPage(rPage, RumPageGetOpaque(newlPage)->flags, pageSize);
10911096
RumInitPage(newlPage, RumPageGetOpaque(rPage)->flags, pageSize);
10921097

1093-
memcpy(RumDataPageGetItem(newlPage, FirstOffsetNumber), vector, separator * sizeofitem);
1098+
ptr = RumDataPageGetItem(newlPage, FirstOffsetNumber);
1099+
memcpy(ptr, vector, separator * sizeofitem);
10941100
RumPageGetOpaque(newlPage)->maxoff = separator;
1095-
memcpy(RumDataPageGetItem(rPage, FirstOffsetNumber),
1096-
vector + separator * sizeofitem, (maxoff - separator) * sizeofitem);
1101+
/* Adjust pd_lower */
1102+
((PageHeader) newlPage)->pd_lower = (ptr + separator * sizeofitem + 1) -
1103+
newlPage;
1104+
1105+
ptr = RumDataPageGetItem(rPage, FirstOffsetNumber);
1106+
memcpy(ptr, vector + separator * sizeofitem,
1107+
(maxoff - separator) * sizeofitem);
10971108
RumPageGetOpaque(rPage)->maxoff = maxoff - separator;
1109+
/* Adjust pd_lower */
1110+
((PageHeader) rPage)->pd_lower = (ptr +
1111+
(maxoff - separator) * sizeofitem + 1) -
1112+
rPage;
10981113

10991114
PostingItemSetBlockNumber(&(btree->pitem), BufferGetBlockNumber(lbuf));
11001115
if (RumPageIsLeaf(newlPage))

0 commit comments

Comments
 (0)