Commit d0dcb315 authored by Robert Haas's avatar Robert Haas

Fix broken logic in lazy_vacuum_heap.

As noted by Tom Lane, the previous coding in this area, which I
introduced in commit bbb6e559, was
poorly tested and caused the vacuum's second heap to go into what would
have been an infinite loop but for the fact that it eventually caused a
memory allocation failure.  This version seems to work better.
parent 4d0b11a0
...@@ -991,7 +991,11 @@ lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats) ...@@ -991,7 +991,11 @@ lazy_vacuum_heap(Relation onerel, LVRelStats *vacrelstats)
buf = ReadBufferExtended(onerel, MAIN_FORKNUM, tblk, RBM_NORMAL, buf = ReadBufferExtended(onerel, MAIN_FORKNUM, tblk, RBM_NORMAL,
vac_strategy); vac_strategy);
if (!ConditionalLockBufferForCleanup(buf)) if (!ConditionalLockBufferForCleanup(buf))
{
ReleaseBuffer(buf);
++tupindex;
continue; continue;
}
tupindex = lazy_vacuum_page(onerel, tblk, buf, tupindex, vacrelstats); tupindex = lazy_vacuum_page(onerel, tblk, buf, tupindex, vacrelstats);
/* Now that we've compacted the page, record its available space */ /* Now that we've compacted the page, record its available space */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment