From: Bruce Momjian Date: Sat, 15 Jun 2002 19:59:59 +0000 (+0000) Subject: WriteBuffer return value: X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=171dee8618a6107ba174824f7bc17386f17f8244;p=users%2Fbernd%2Fpostgres.git WriteBuffer return value: >I'd vote for changing WriteBuffer to >return void, and have it elog() on bad argument. Manfred Koizar --- diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index 730b014093..d55f6d1fa2 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -468,8 +468,7 @@ nextval(PG_FUNCTION_ARGS) LockBuffer(buf, BUFFER_LOCK_UNLOCK); - if (WriteBuffer(buf) == STATUS_ERROR) - elog(ERROR, "%s.nextval: WriteBuffer failed", sequence->relname); + WriteBuffer(buf); relation_close(seqrel, NoLock); @@ -581,8 +580,7 @@ do_setval(RangeVar *sequence, int64 next, bool iscalled) LockBuffer(buf, BUFFER_LOCK_UNLOCK); - if (WriteBuffer(buf) == STATUS_ERROR) - elog(ERROR, "%s.setval: WriteBuffer failed", sequence->relname); + WriteBuffer(buf); relation_close(seqrel, NoLock); } diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 5ee5873e8b..21a7876c67 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -87,6 +87,7 @@ static int ReleaseBufferWithBufferLock(Buffer buffer); static int BufferReplace(BufferDesc *bufHdr); void PrintBufferDescs(void); +static void write_buffer(Buffer buffer, bool unpin); /* * ReadBuffer -- returns a buffer containing the requested @@ -558,29 +559,22 @@ BufferAlloc(Relation reln, } /* - * WriteBuffer - * - * Marks buffer contents as dirty (actual write happens later). - * - * Assume that buffer is pinned. Assume that reln is - * valid. - * - * Side Effects: - * Pin count is decremented. + * write_buffer -- common functionality for + * WriteBuffer and WriteNoReleaseBuffer */ - -#undef WriteBuffer - -int -WriteBuffer(Buffer buffer) +static void +write_buffer(Buffer buffer, bool release) { BufferDesc *bufHdr; if (BufferIsLocal(buffer)) - return WriteLocalBuffer(buffer, TRUE); + { + WriteLocalBuffer(buffer, release); + return; + } if (BAD_BUFFER_ID(buffer)) - return FALSE; + elog(ERROR, "write_buffer: bad buffer %d", buffer); bufHdr = &BufferDescriptors[buffer - 1]; @@ -589,37 +583,39 @@ WriteBuffer(Buffer buffer) bufHdr->flags |= (BM_DIRTY | BM_JUST_DIRTIED); - UnpinBuffer(bufHdr); + if (release) + UnpinBuffer(bufHdr); LWLockRelease(BufMgrLock); +} - return TRUE; +/* + * WriteBuffer + * + * Marks buffer contents as dirty (actual write happens later). + * + * Assume that buffer is pinned. Assume that reln is + * valid. + * + * Side Effects: + * Pin count is decremented. + */ + +#undef WriteBuffer + +void +WriteBuffer(Buffer buffer) +{ + write_buffer(buffer, true); } /* * WriteNoReleaseBuffer -- like WriteBuffer, but do not unpin the buffer * when the operation is complete. */ -int +void WriteNoReleaseBuffer(Buffer buffer) { - BufferDesc *bufHdr; - - if (BufferIsLocal(buffer)) - return WriteLocalBuffer(buffer, FALSE); - - if (BAD_BUFFER_ID(buffer)) - return STATUS_ERROR; - - bufHdr = &BufferDescriptors[buffer - 1]; - - LWLockAcquire(BufMgrLock, LW_EXCLUSIVE); - Assert(bufHdr->refcount > 0); - - bufHdr->flags |= (BM_DIRTY | BM_JUST_DIRTIED); - - LWLockRelease(BufMgrLock); - - return STATUS_OK; + write_buffer(buffer, false); } diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c index a242e7f241..482c4cdd42 100644 --- a/src/backend/storage/buffer/localbuf.c +++ b/src/backend/storage/buffer/localbuf.c @@ -155,7 +155,7 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr) * WriteLocalBuffer - * writes out a local buffer */ -int +void WriteLocalBuffer(Buffer buffer, bool release) { int bufid; @@ -174,8 +174,6 @@ WriteLocalBuffer(Buffer buffer, bool release) Assert(LocalRefCount[bufid] > 0); LocalRefCount[bufid]--; } - - return true; } /* diff --git a/src/include/storage/buf_internals.h b/src/include/storage/buf_internals.h index f09754b997..1afd7a853e 100644 --- a/src/include/storage/buf_internals.h +++ b/src/include/storage/buf_internals.h @@ -176,7 +176,7 @@ extern BufferDesc *LocalBufferDescriptors; extern BufferDesc *LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr); -extern int WriteLocalBuffer(Buffer buffer, bool release); +extern void WriteLocalBuffer(Buffer buffer, bool release); extern int FlushLocalBuffer(Buffer buffer, bool sync, bool release); extern void LocalBufferSync(void); extern void ResetLocalBufferPool(void); diff --git a/src/include/storage/bufmgr.h b/src/include/storage/bufmgr.h index 1ee4b0410c..68f0ffc4b0 100644 --- a/src/include/storage/bufmgr.h +++ b/src/include/storage/bufmgr.h @@ -148,8 +148,8 @@ extern long *LocalRefCount; */ extern Buffer ReadBuffer(Relation reln, BlockNumber blockNum); extern int ReleaseBuffer(Buffer buffer); -extern int WriteBuffer(Buffer buffer); -extern int WriteNoReleaseBuffer(Buffer buffer); +extern void WriteBuffer(Buffer buffer); +extern void WriteNoReleaseBuffer(Buffer buffer); extern Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation, BlockNumber blockNum); extern int FlushBuffer(Buffer buffer, bool sync, bool release);