@@ -250,14 +250,18 @@ PageAddItemExtended(Page page,
250
250
/* if no free slot, we'll put it at limit (1st open slot) */
251
251
if (PageHasFreeLinePointers (phdr ))
252
252
{
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 */
258
254
for (offsetNumber = 1 ; offsetNumber < limit ; offsetNumber ++ )
259
255
{
260
256
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
+
261
265
if (!ItemIdIsUsed (itemId ) && !ItemIdHasStorage (itemId ))
262
266
break ;
263
267
}
@@ -676,7 +680,9 @@ compactify_tuples(itemIdCompact itemidbase, int nitems, Page page, bool presorte
676
680
*
677
681
* This routine is usable for heap pages only, but see PageIndexMultiDelete.
678
682
*
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.
680
686
*/
681
687
void
682
688
PageRepairFragmentation (Page page )
@@ -771,7 +777,7 @@ PageRepairFragmentation(Page page)
771
777
compactify_tuples (itemidbase , nstorage , page , presorted );
772
778
}
773
779
774
- /* Set hint bit for PageAddItem */
780
+ /* Set hint bit for PageAddItemExtended */
775
781
if (nunused > 0 )
776
782
PageSetHasFreeLinePointers (page );
777
783
else
0 commit comments