]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix longstanding error in VACUUM: sometimes would examine a buffer page
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 29 Jun 2001 16:34:49 +0000 (16:34 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
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 694d0e8bbc1491c39827ff833f8cc3fb68906e9e..8c4f9985e3f587d14d3d897d51a4ca1be1eec178 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.189 2001/03/25 23:23:58 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.189.2.1 2001/06/29 16:34:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -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