diff options
author | Vadim B. Mikheev <vadim4o@yahoo.com> | 1997-10-12 07:12:03 +0000 |
---|---|---|
committer | Vadim B. Mikheev <vadim4o@yahoo.com> | 1997-10-12 07:12:03 +0000 |
commit | 14f81d8d3455933cc1756cccc702cc83a7a1ac84 (patch) | |
tree | 593e51e6d35ff73539497dcab9adb472611f491e | |
parent | defb10a4503a83a5c48577e5aa7880d028f17211 (diff) | |
download | postgresql-14f81d8d3455933cc1756cccc702cc83a7a1ac84.tar.gz postgresql-14f81d8d3455933cc1756cccc702cc83a7a1ac84.zip |
Decrement relation reference count incremented in
RelationIdCacheGetRelation() to flush relations from cache
in commit time.
-rw-r--r-- | src/backend/storage/buffer/bufmgr.c | 16 | ||||
-rw-r--r-- | src/backend/storage/buffer/localbuf.c | 9 |
2 files changed, 13 insertions, 12 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index ae249eed2aa..f8b6c579c83 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -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); diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c index 2b5c72d9db1..9b335ae5845 100644 --- a/src/backend/storage/buffer/localbuf.c +++ b/src/backend/storage/buffer/localbuf.c @@ -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; } |