localbuf.c must be able to do blind writes.
authorTom Lane
Thu, 5 Dec 2002 22:48:03 +0000 (22:48 +0000)
committerTom Lane
Thu, 5 Dec 2002 22:48:03 +0000 (22:48 +0000)
src/backend/storage/buffer/localbuf.c

index 5f4033b583e088738c7f1356cd1b6e2e37722f66..29ec790222295aeb438c324214c01c2196a3575b 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v 1.46 2002/09/04 20:31:25 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v 1.47 2002/12/05 22:48:03 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -90,19 +90,24 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr)
    {
        Relation    bufrel = RelationNodeCacheGetRelation(bufHdr->tag.rnode);
 
-       /*
-        * The relcache is not supposed to throw away temp rels, so this
-        * should always succeed.
-        */
-       Assert(bufrel != NULL);
-
        /* flush this page */
-       smgrwrite(DEFAULT_SMGR, bufrel, bufHdr->tag.blockNum,
-                 (char *) MAKE_PTR(bufHdr->data));
-       LocalBufferFlushCount++;
+       if (bufrel == (Relation) NULL)
+       {
+           smgrblindwrt(DEFAULT_SMGR,
+                        bufHdr->tag.rnode,
+                        bufHdr->tag.blockNum,
+                        (char *) MAKE_PTR(bufHdr->data));
+       }
+       else
+       {
+           smgrwrite(DEFAULT_SMGR, bufrel,
+                     bufHdr->tag.blockNum,
+                     (char *) MAKE_PTR(bufHdr->data));
+           /* drop refcount incremented by RelationNodeCacheGetRelation */
+           RelationDecrementReferenceCount(bufrel);
+       }
 
-       /* drop refcount incremented by RelationNodeCacheGetRelation */
-       RelationDecrementReferenceCount(bufrel);
+       LocalBufferFlushCount++;
    }
 
    /*