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

Lines changed: 13 additions & 7 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy