aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2015-07-27 12:24:27 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2015-07-27 12:24:27 +0300
commit65c384c5abee7df6d27f98135790ea24c1b9578b (patch)
tree7b19acf70a5abe2155d9631b5694a6693c6957bc
parente3a9a194b7cb70a8c01deeff9f876a2631f1be06 (diff)
downloadpostgresql-65c384c5abee7df6d27f98135790ea24c1b9578b.tar.gz
postgresql-65c384c5abee7df6d27f98135790ea24c1b9578b.zip
Avoid calling PageGetSpecialPointer() on an all-zeros page.
That was otherwise harmless, but tripped the new assertion in PageGetSpecialPointer(). Reported by Amit Langote. Backpatch to 9.5, where the assertion was added.
-rw-r--r--src/backend/access/nbtree/nbtree.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c
index 9431ab5d042..cf4a6dc7c47 100644
--- a/src/backend/access/nbtree/nbtree.c
+++ b/src/backend/access/nbtree/nbtree.c
@@ -881,7 +881,7 @@ btvacuumpage(BTVacState *vstate, BlockNumber blkno, BlockNumber orig_blkno)
BlockNumber recurse_to;
Buffer buf;
Page page;
- BTPageOpaque opaque;
+ BTPageOpaque opaque = NULL;
restart:
delete_now = false;
@@ -900,9 +900,11 @@ restart:
info->strategy);
LockBuffer(buf, BT_READ);
page = BufferGetPage(buf);
- opaque = (BTPageOpaque) PageGetSpecialPointer(page);
if (!PageIsNew(page))
+ {
_bt_checkpage(rel, buf);
+ opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ }
/*
* If we are recursing, the only case we want to do anything with is a