Decrement relation reference count incremented in
authorVadim B. Mikheev
Sun, 12 Oct 1997 07:12:03 +0000 (07:12 +0000)
committerVadim B. Mikheev
Sun, 12 Oct 1997 07:12:03 +0000 (07:12 +0000)
RelationIdCacheGetRelation() to flush relations from cache
in commit time.

src/backend/storage/buffer/bufmgr.c
src/backend/storage/buffer/localbuf.c

index ae249eed2aa76e7dd7a1d743ac2743042055be41..f8b6c579c83261bbb3523c36c25929fed889cf1f 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.26 1997/09/22 07:13:56 vadim Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.27 1997/10/12 07:12:02 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -832,6 +832,8 @@ FlushBuffer(Buffer buffer, bool release)
 
    status = smgrflush(bufHdr->bufsmgr, bufrel, bufHdr->tag.blockNum,
                       (char *) MAKE_PTR(bufHdr->data));
+   
+   RelationDecrementReferenceCount(bufrel);
 
    if (status == SM_FAIL)
    {
@@ -1065,15 +1067,8 @@ BufferSync()
                 * were flushing it out we must not clear DIRTY flag -
                 * vadim 01/17/97
                 */
-               if (bufHdr->flags & BM_JUST_DIRTIED)
-               {
-                   elog(NOTICE, "BufferSync: content of block %u (%s) changed while flushing",
-                        bufHdr->tag.blockNum, bufHdr->sb_relname);
-               }
-               else
-               {
+               if (!(bufHdr->flags & BM_JUST_DIRTIED))
                    bufHdr->flags &= ~BM_DIRTY;
-               }
                if (reln != (Relation) NULL)
                    RelationDecrementReferenceCount(reln);
            }
@@ -1392,6 +1387,9 @@ BufferReplace(BufferDesc *bufHdr, bool bufferLockHeld)
                              bufHdr->tag.blockNum,
                              (char *) MAKE_PTR(bufHdr->data));
    }
+   
+   if (reln != (Relation) NULL)
+       RelationDecrementReferenceCount(reln);
 
    if (status == SM_FAIL)
        return (FALSE);
index 2b5c72d9db1e8c70fc6dee669600e3f60ac8dd47..9b335ae5845da7b2d978ab3586c11698f9b23d66 100644 (file)
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v 1.12 1997/09/18 20:21:22 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v 1.13 1997/10/12 07:12:03 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -127,6 +127,7 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr)
        smgrwrite(bufrel->rd_rel->relsmgr, bufrel, bufHdr->tag.blockNum,
                  (char *) MAKE_PTR(bufHdr->data));
        LocalBufferFlushCount++;
+       RelationDecrementReferenceCount(bufrel);
    }
 
    /*
@@ -204,7 +205,8 @@ FlushLocalBuffer(Buffer buffer, bool release)
    smgrflush(bufrel->rd_rel->relsmgr, bufrel, bufHdr->tag.blockNum,
              (char *) MAKE_PTR(bufHdr->data));
    LocalBufferFlushCount++;
-
+   RelationDecrementReferenceCount(bufrel);
+   
    Assert(LocalRefCount[bufid] > 0);
    if (release)
        LocalRefCount[bufid]--;
@@ -277,7 +279,8 @@ LocalBufferSync(void)
            smgrwrite(bufrel->rd_rel->relsmgr, bufrel, buf->tag.blockNum,
                      (char *) MAKE_PTR(buf->data));
            LocalBufferFlushCount++;
-
+           RelationDecrementReferenceCount(bufrel);
+           
            buf->tag.relId.relId = InvalidOid;
            buf->flags &= ~BM_DIRTY;
        }