Fix longstanding error in VACUUM: sometimes would examine a buffer page
authorTom Lane <[email protected]>
Fri, 29 Jun 2001 16:34:49 +0000 (16:34 +0000)
committerTom Lane <[email protected]>
Fri, 29 Jun 2001 16:34:49 +0000 (16:34 +0000)
after writing/unpinning it.  An actual failure is unlikely, unless the
system is tremendously short of buffers ... but a bug is a bug.

src/backend/commands/vacuum.c

index fbcc69d35bdb7d0b6c5d0eebf675d68f1e1ffddc..8735f3ff4cab0027d0bfa42f135fa3ae115c5ea3 100644 (file)
@@ -577,7 +577,6 @@ scan_heap(VRelStats *vacrelstats, Relation onerel,
                                maxoff;
        bool            pgchanged,
                                tupgone,
-                               dobufrel,
                                notup;
        char       *relname;
        VacPage         vacpage,
@@ -876,15 +875,6 @@ scan_heap(VRelStats *vacrelstats, Relation onerel,
                        }
                }
 
-               if (pgchanged)
-               {
-                       WriteBuffer(buf);
-                       dobufrel = false;
-                       changed_pages++;
-               }
-               else
-                       dobufrel = true;
-
                if (tempPage != (Page) NULL)
                {                                               /* Some tuples are gone */
                        PageRepairFragmentation(tempPage, NULL);
@@ -900,8 +890,15 @@ scan_heap(VRelStats *vacrelstats, Relation onerel,
                        free_size += vacpage->free;
                        reap_page(vacuum_pages, vacpage);
                }
-               if (dobufrel)
+
+               if (pgchanged)
+               {
+                       WriteBuffer(buf);
+                       changed_pages++;
+               }
+               else
                        ReleaseBuffer(buf);
+
                if (notup)
                        empty_end_pages++;
                else