mirror of
https://github.com/postgres/postgres.git
synced 2026-04-15 22:10:45 -04:00
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.
This commit is contained in:
parent
807a262657
commit
1d15afda13
1 changed files with 9 additions and 12 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue