diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2005-11-06 22:39:21 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2005-11-06 22:39:21 +0000 |
commit | 6236991143aa9e6a10121431451972c2991533c7 (patch) | |
tree | 40f1d49e7e88e0decc785e092097479567734384 /src/backend/access/gist/gistvacuum.c | |
parent | 766dc45d9f133aaa12d952052e1e512dbf3f5ec0 (diff) | |
download | postgresql-6236991143aa9e6a10121431451972c2991533c7.tar.gz postgresql-6236991143aa9e6a10121431451972c2991533c7.zip |
Add simple sanity checks on newly-read pages to GiST, too.
Diffstat (limited to 'src/backend/access/gist/gistvacuum.c')
-rw-r--r-- | src/backend/access/gist/gistvacuum.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/backend/access/gist/gistvacuum.c b/src/backend/access/gist/gistvacuum.c index 11497c8093a..60725e5e05b 100644 --- a/src/backend/access/gist/gistvacuum.c +++ b/src/backend/access/gist/gistvacuum.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.9 2005/09/22 20:44:36 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.10 2005/11/06 22:39:20 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -65,6 +65,11 @@ gistVacuumUpdate(GistVacuum *gv, BlockNumber blkno, bool needunion) lencompleted = 16; buffer = ReadBuffer(gv->index, blkno); + /* + * This is only used during VACUUM FULL, so we need not bother to lock + * individual index pages + */ + gistcheckpage(gv->index, buffer); page = (Page) BufferGetPage(buffer); maxoff = PageGetMaxOffsetNumber(page); @@ -378,9 +383,10 @@ gistvacuumcleanup(PG_FUNCTION_ARGS) needFullVacuum = false; - needLock = !RELATION_IS_LOCAL(rel); if (info->vacuum_full) needLock = false; /* relation locked with AccessExclusiveLock */ + else + needLock = !RELATION_IS_LOCAL(rel); /* try to find deleted pages */ if (needLock) @@ -403,7 +409,7 @@ gistvacuumcleanup(PG_FUNCTION_ARGS) LockBuffer(buffer, GIST_SHARE); page = (Page) BufferGetPage(buffer); - if (GistPageIsDeleted(page)) + if (PageIsNew(page) || GistPageIsDeleted(page)) { if (nFreePages < maxFreePages) { @@ -513,6 +519,7 @@ gistbulkdelete(PG_FUNCTION_ARGS) ItemId iid; LockBuffer(buffer, GIST_SHARE); + gistcheckpage(rel, buffer); page = (Page) BufferGetPage(buffer); if (GistPageIsLeaf(page)) |