aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-06-29 16:34:30 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-06-29 16:34:30 +0000
commit39381507b7eb086b03d10c0235a3af4158751476 (patch)
treed2f51f99399cce1d101c249633a6eab4930ec0b4 /src
parent1d4ee0cc1ed8cd35bbd3ae1c0607dc19352e7d7a (diff)
downloadpostgresql-39381507b7eb086b03d10c0235a3af4158751476.tar.gz
postgresql-39381507b7eb086b03d10c0235a3af4158751476.zip
Fix longstanding error in VACUUM: sometimes would examine a buffer page
after writing/unpinning it. An actual failure is unlikely, unless the system is tremendously short of buffers ... but a bug is a bug.
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/vacuum.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 9c66842feb6..a5d6778b93f 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.198 2001/06/27 23:31:38 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.199 2001/06/29 16:34:30 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -631,7 +631,6 @@ scan_heap(VRelStats *vacrelstats, Relation onerel,
maxoff;
bool pgchanged,
tupgone,
- dobufrel,
notup;
char *relname;
VacPage vacpage,
@@ -931,15 +930,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);
@@ -955,8 +945,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