PageRepairFragmentation(page);
+ /*
+ * Now that we have removed the dead tuples from the page, once again
+ * check if the page has become all-visible.
+ */
+ if (heap_page_is_all_visible(buffer, &visibility_cutoff_xid))
+ PageSetAllVisible(page);
+
/*
* Mark buffer dirty before we write WAL.
*/
}
/*
- * Now that we have removed the dead tuples from the page, once again
- * check if the page has become all-visible.
+ * All the changes to the heap page have been done. If the all-visible
+ * flag is now set, also set the VM bit.
*/
- if (!visibilitymap_test(onerel, blkno, vmbuffer) &&
- heap_page_is_all_visible(buffer, &visibility_cutoff_xid))
+ if (PageIsAllVisible(page) &&
+ !visibilitymap_test(onerel, blkno, vmbuffer))
{
Assert(BufferIsValid(*vmbuffer));
- PageSetAllVisible(page);
visibilitymap_set(onerel, blkno, buffer, InvalidXLogRecPtr, *vmbuffer,
visibility_cutoff_xid);
}