88 *
99 *
1010 * IDENTIFICATION
11- * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.124 2002/06/15 19:55:37 momjian Exp $
11+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.125 2002/06/15 19:59:59 momjian Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
@@ -87,6 +87,7 @@ static int ReleaseBufferWithBufferLock(Buffer buffer);
8787static int BufferReplace (BufferDesc * bufHdr );
8888void PrintBufferDescs (void );
8989
90+ static void write_buffer (Buffer buffer , bool unpin );
9091
9192/*
9293 * ReadBuffer -- returns a buffer containing the requested
@@ -558,29 +559,22 @@ BufferAlloc(Relation reln,
558559}
559560
560561/*
561- * WriteBuffer
562- *
563- * Marks buffer contents as dirty (actual write happens later).
564- *
565- * Assume that buffer is pinned. Assume that reln is
566- * valid.
567- *
568- * Side Effects:
569- * Pin count is decremented.
562+ * write_buffer -- common functionality for
563+ * WriteBuffer and WriteNoReleaseBuffer
570564 */
571-
572- #undef WriteBuffer
573-
574- int
575- WriteBuffer (Buffer buffer )
565+ static void
566+ write_buffer (Buffer buffer , bool release )
576567{
577568 BufferDesc * bufHdr ;
578569
579570 if (BufferIsLocal (buffer ))
580- return WriteLocalBuffer (buffer , TRUE);
571+ {
572+ WriteLocalBuffer (buffer , release );
573+ return ;
574+ }
581575
582576 if (BAD_BUFFER_ID (buffer ))
583- return FALSE ;
577+ elog ( ERROR , "write_buffer: bad buffer %d" , buffer ) ;
584578
585579 bufHdr = & BufferDescriptors [buffer - 1 ];
586580
@@ -589,37 +583,39 @@ WriteBuffer(Buffer buffer)
589583
590584 bufHdr -> flags |= (BM_DIRTY | BM_JUST_DIRTIED );
591585
592- UnpinBuffer (bufHdr );
586+ if (release )
587+ UnpinBuffer (bufHdr );
593588 LWLockRelease (BufMgrLock );
589+ }
594590
595- return TRUE;
591+ /*
592+ * WriteBuffer
593+ *
594+ * Marks buffer contents as dirty (actual write happens later).
595+ *
596+ * Assume that buffer is pinned. Assume that reln is
597+ * valid.
598+ *
599+ * Side Effects:
600+ * Pin count is decremented.
601+ */
602+
603+ #undef WriteBuffer
604+
605+ void
606+ WriteBuffer (Buffer buffer )
607+ {
608+ write_buffer (buffer , true);
596609}
597610
598611/*
599612 * WriteNoReleaseBuffer -- like WriteBuffer, but do not unpin the buffer
600613 * when the operation is complete.
601614 */
602- int
615+ void
603616WriteNoReleaseBuffer (Buffer buffer )
604617{
605- BufferDesc * bufHdr ;
606-
607- if (BufferIsLocal (buffer ))
608- return WriteLocalBuffer (buffer , FALSE);
609-
610- if (BAD_BUFFER_ID (buffer ))
611- return STATUS_ERROR ;
612-
613- bufHdr = & BufferDescriptors [buffer - 1 ];
614-
615- LWLockAcquire (BufMgrLock , LW_EXCLUSIVE );
616- Assert (bufHdr -> refcount > 0 );
617-
618- bufHdr -> flags |= (BM_DIRTY | BM_JUST_DIRTIED );
619-
620- LWLockRelease (BufMgrLock );
621-
622- return STATUS_OK ;
618+ write_buffer (buffer , false);
623619}
624620
625621
0 commit comments