diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-12-05 22:48:03 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-12-05 22:48:03 +0000 |
commit | a2e8e15dd442e59deff2e96542b5281c14f63786 (patch) | |
tree | 00d32981d472fdd1ad4483aa196d65b09188e0e5 /src/backend/storage/buffer/localbuf.c | |
parent | 993b145d7ff99231128e83b51317094821314e32 (diff) | |
download | postgresql-a2e8e15dd442e59deff2e96542b5281c14f63786.tar.gz postgresql-a2e8e15dd442e59deff2e96542b5281c14f63786.zip |
localbuf.c must be able to do blind writes.
Diffstat (limited to 'src/backend/storage/buffer/localbuf.c')
-rw-r--r-- | src/backend/storage/buffer/localbuf.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c index 5f4033b583e..29ec7902222 100644 --- a/src/backend/storage/buffer/localbuf.c +++ b/src/backend/storage/buffer/localbuf.c @@ -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++; } /* |