Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 30aaab2

Browse files
PageAddItemExtended(): Add LP_UNUSED assertion.
Assert that LP_UNUSED items have no storage. If it's worth having defensive code in non-assert builds then it's worth having an assertion as well.
1 parent f58b230 commit 30aaab2

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

src/backend/storage/page/bufpage.c

+13-7
Original file line numberDiff line numberDiff line change
@@ -250,14 +250,18 @@ PageAddItemExtended(Page page,
250250
/* if no free slot, we'll put it at limit (1st open slot) */
251251
if (PageHasFreeLinePointers(phdr))
252252
{
253-
/*
254-
* Look for "recyclable" (unused) ItemId. We check for no storage
255-
* as well, just to be paranoid --- unused items should never have
256-
* storage.
257-
*/
253+
/* Look for "recyclable" (unused) ItemId */
258254
for (offsetNumber = 1; offsetNumber < limit; offsetNumber++)
259255
{
260256
itemId = PageGetItemId(phdr, offsetNumber);
257+
258+
/*
259+
* We check for no storage as well, just to be paranoid;
260+
* unused items should never have storage. Assert() that the
261+
* invariant is respected too.
262+
*/
263+
Assert(ItemIdIsUsed(itemId) || !ItemIdHasStorage(itemId));
264+
261265
if (!ItemIdIsUsed(itemId) && !ItemIdHasStorage(itemId))
262266
break;
263267
}
@@ -676,7 +680,9 @@ compactify_tuples(itemIdCompact itemidbase, int nitems, Page page, bool presorte
676680
*
677681
* This routine is usable for heap pages only, but see PageIndexMultiDelete.
678682
*
679-
* As a side effect, the page's PD_HAS_FREE_LINES hint bit is updated.
683+
* Caller had better have a super-exclusive lock on page's buffer. As a side
684+
* effect the page's PD_HAS_FREE_LINES hint bit will be set or unset as
685+
* needed.
680686
*/
681687
void
682688
PageRepairFragmentation(Page page)
@@ -771,7 +777,7 @@ PageRepairFragmentation(Page page)
771777
compactify_tuples(itemidbase, nstorage, page, presorted);
772778
}
773779

774-
/* Set hint bit for PageAddItem */
780+
/* Set hint bit for PageAddItemExtended */
775781
if (nunused > 0)
776782
PageSetHasFreeLinePointers(page);
777783
else

0 commit comments

Comments
 (0)