summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2008-06-11 08:38:56 +0000
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2008-06-11 08:38:56 +0000
commit96675bff1f49d2d846750e344d3adc409e6bad73 (patch)
treeb6e0c6a43ba376415a9179dc01123d16999f984c
parent109940c635ff831b3d6d0cb0a7e1b6d4d838becf (diff)
Fix bug in the WAL recovery code to finish an incomplete split.
CacheInvalidateRelcache() crashes if called in WAL recovery, because the invalidation infrastructure hasn't been initialized yet. Back-patch to 8.2, where the bug was introduced.
-rw-r--r--src/backend/access/nbtree/nbtinsert.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c
index e5e78797bbd..01e1ea49448 100644
--- a/src/backend/access/nbtree/nbtinsert.c
+++ b/src/backend/access/nbtree/nbtinsert.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.166 2008/05/12 00:00:45 alvherre Exp $
+ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.167 2008/06/11 08:38:56 heikki Exp $
*
*-------------------------------------------------------------------------
*/
@@ -747,7 +747,8 @@ _bt_insertonpg(Relation rel,
/* release buffers; send out relcache inval if metapage changed */
if (BufferIsValid(metabuf))
{
- CacheInvalidateRelcache(rel);
+ if (!InRecovery)
+ CacheInvalidateRelcache(rel);
_bt_relbuf(rel, metabuf);
}
@@ -1792,7 +1793,8 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf)
END_CRIT_SECTION();
/* send out relcache inval for metapage change */
- CacheInvalidateRelcache(rel);
+ if (!InRecovery)
+ CacheInvalidateRelcache(rel);
/* done with metapage */
_bt_relbuf(rel, metabuf);