From: Tom Lane Date: Fri, 29 Jun 2001 16:34:49 +0000 (+0000) Subject: Fix longstanding error in VACUUM: sometimes would examine a buffer page X-Git-Tag: REL7_1_3~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1d15afda136deef870aa9f70c795b9062ea23b67;p=thirdparty%2Fpostgresql.git 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. --- diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 694d0e8bbc1..8c4f9985e3f 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.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