Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit30aaab2

Browse files
PageAddItemExtended(): Add LP_UNUSED assertion.
Assert that LP_UNUSED items have no storage. If it's worth havingdefensive code in non-assert builds then it's worth having an assertionas well.
1 parentf58b230 commit30aaab2

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(Pagepage)
@@ -771,7 +777,7 @@ PageRepairFragmentation(Page page)
771777
compactify_tuples(itemidbase,nstorage,page,presorted);
772778
}
773779

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

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp