aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2015-07-27 12:30:26 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2015-07-27 12:33:13 +0300
commita471700e3cd3c38529ace909984ef10562888084 (patch)
tree0fdd6a379e90d9cb7dd19fa337098f7208b6a583
parent2e226763e3ad160b768b13793db645b31455edea (diff)
downloadpostgresql-a471700e3cd3c38529ace909984ef10562888084.tar.gz
postgresql-a471700e3cd3c38529ace909984ef10562888084.zip
Reuse all-zero pages in GIN.
In GIN, an all-zeros page would be leaked forever, and never reused. Just add them to the FSM in vacuum, and they will be reinitialized when grabbed from the FSM. On master and 9.5, attempting to access the page's opaque struct also caused an assertion failure, although that was otherwise harmless. Reported by Jeff Janes. Backpatch to all supported versions.
-rw-r--r--src/backend/access/gin/ginvacuum.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/backend/access/gin/ginvacuum.c b/src/backend/access/gin/ginvacuum.c
index 3308bb2e629..98535833d2e 100644
--- a/src/backend/access/gin/ginvacuum.c
+++ b/src/backend/access/gin/ginvacuum.c
@@ -762,7 +762,7 @@ ginvacuumcleanup(PG_FUNCTION_ARGS)
LockBuffer(buffer, GIN_SHARE);
page = (Page) BufferGetPage(buffer);
- if (GinPageIsDeleted(page))
+ if (PageIsNew(page) || GinPageIsDeleted(page))
{
Assert(blkno != GIN_ROOT_BLKNO);
RecordFreeIndexPage(index, blkno);