]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Add RelationOpenSmgr() calls to ensure rd_smgr is valid when we try to
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 7 Jan 2006 22:46:07 +0000 (22:46 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 7 Jan 2006 22:46:07 +0000 (22:46 +0000)
use it.  While it normally has been opened earlier during btree index
build, testing shows that it's possible for the link to be closed again
if an sinval reset occurs while the index is being built.

src/backend/access/nbtree/nbtsort.c

index 011040151183263dac2eb9527fed95ea1169428e..b4a056a060735d7c4aa263d456ed378d27892bff 100644 (file)
@@ -56,7 +56,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsort.c,v 1.90 2004/12/31 21:59:22 pgsql Exp $
+ *       $PostgreSQL: pgsql/src/backend/access/nbtree/nbtsort.c,v 1.90.4.1 2006/01/07 22:46:07 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -273,6 +273,9 @@ _bt_blnewpage(uint32 level)
 static void
 _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
 {
+       /* Ensure rd_smgr is open (could have been closed by relcache flush!) */
+       RelationOpenSmgr(wstate->index);
+
        /* XLOG stuff */
        if (wstate->btws_use_wal)
        {
@@ -817,5 +820,8 @@ _bt_load(BTWriteState *wstate, BTSpool *btspool, BTSpool *btspool2)
         * disk when the crash occurs.
         */
        if (!wstate->index->rd_istemp)
+       {
+               RelationOpenSmgr(wstate->index);
                smgrimmedsync(wstate->index->rd_smgr);
+       }
 }