diff options
Diffstat (limited to 'src/backend/access/gin/ginvacuum.c')
-rw-r--r-- | src/backend/access/gin/ginvacuum.c | 14 |
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); |