@@ -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 */
681687void
682688PageRepairFragmentation (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