aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/gin/ginvacuum.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/gin/ginvacuum.c')
-rw-r--r--src/backend/access/gin/ginvacuum.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/backend/access/gin/ginvacuum.c b/src/backend/access/gin/ginvacuum.c
index 2bc80a26433..31e5f647f07 100644
--- a/src/backend/access/gin/ginvacuum.c
+++ b/src/backend/access/gin/ginvacuum.c
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.5 2006/07/31 20:08:59 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/gin/ginvacuum.c,v 1.6 2006/09/21 20:31:21 tgl Exp $
*-------------------------------------------------------------------------
*/
@@ -575,7 +575,8 @@ ginvacuumcleanup(PG_FUNCTION_ARGS) {
bool needLock;
BlockNumber npages,
blkno;
- BlockNumber nFreePages,
+ BlockNumber totFreePages,
+ nFreePages,
*freePages,
maxFreePages;
BlockNumber lastBlock = GIN_ROOT_BLKNO,
@@ -610,7 +611,7 @@ ginvacuumcleanup(PG_FUNCTION_ARGS) {
if (maxFreePages > MaxFSMPages)
maxFreePages = MaxFSMPages;
- nFreePages = 0;
+ totFreePages = nFreePages = 0;
freePages = (BlockNumber *) palloc(sizeof(BlockNumber) * maxFreePages);
for (blkno = GIN_ROOT_BLKNO + 1; blkno < npages; blkno++) {
@@ -626,6 +627,7 @@ ginvacuumcleanup(PG_FUNCTION_ARGS) {
if ( GinPageIsDeleted(page) ) {
if (nFreePages < maxFreePages)
freePages[nFreePages++] = blkno;
+ totFreePages++;
} else
lastFilledBlock = blkno;
@@ -638,7 +640,7 @@ ginvacuumcleanup(PG_FUNCTION_ARGS) {
int i;
for (i = 0; i < nFreePages; i++)
if (freePages[i] >= lastFilledBlock) {
- nFreePages = i;
+ totFreePages = nFreePages = i;
break;
}
@@ -648,8 +650,8 @@ ginvacuumcleanup(PG_FUNCTION_ARGS) {
stats->pages_removed = lastBlock - lastFilledBlock;
}
- RecordIndexFreeSpace(&index->rd_node, nFreePages, freePages);
- stats->pages_free = nFreePages;
+ RecordIndexFreeSpace(&index->rd_node, totFreePages, nFreePages, freePages);
+ stats->pages_free = totFreePages;
if (needLock)
LockRelationForExtension(index, ExclusiveLock);