diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2001-06-29 16:34:30 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2001-06-29 16:34:30 +0000 |
commit | 39381507b7eb086b03d10c0235a3af4158751476 (patch) | |
tree | d2f51f99399cce1d101c249633a6eab4930ec0b4 /src | |
parent | 1d4ee0cc1ed8cd35bbd3ae1c0607dc19352e7d7a (diff) | |
download | postgresql-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.c | 21 |
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 |