summaryrefslogtreecommitdiff
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:32:48 +0300
commit7658368cfd5b5a010e57f8eec6cc4c6e19ee635b (patch)
treec7afc9f9d1f85784e7e2d2f271135967edfab838
parentf4297f8c5fd457a54671947023f8b56237b952db (diff)
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 be9c5e9ce4d..8f58794a208 100644
--- a/src/backend/access/gin/ginvacuum.c
+++ b/src/backend/access/gin/ginvacuum.c
@@ -760,7 +760,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);