This patch cleans up some of the bufmgr code:

- replace uses of

        LockBuffer(buf, BUFFER_LOCK_UNLOCK);
        ReleaseBuffer(buf);
        
  with the equivalent, but more concise:

        UnlockAndReleaseBuffer(buf);

- analogous changes were made by replacing LockBuffer() + WriteBuffer()
with UnlockAndWriteBuffer()

- remove a bunch of #ifdef BMTRACE code, since it was ugly and broken
anyway

- remove an unused buffer descriptor bit flag (BM_PRIVATE)

- move the definition of INVALID_DESCRIPTOR to out of bufmgr.h and into
freelist.c, since it is the only file that uses it

- remove another unused function, and fix a few comments

Please apply to the CVS HEAD.

-Neil

Index: src/backend/access/hash/hashpage.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/access/hash/hashpage.c,v
retrieving revision 1.42
diff -c -r1.42 hashpage.c
*** src/backend/access/hash/hashpage.c	4 Sep 2003 22:06:27 -0000	1.42
--- src/backend/access/hash/hashpage.c	31 Oct 2003 22:55:59 -0000
***************
*** 135,142 ****
  void
  _hash_relbuf(Relation rel, Buffer buf)
  {
! 	LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 	ReleaseBuffer(buf);
  }
  
  /*
--- 135,141 ----
  void
  _hash_relbuf(Relation rel, Buffer buf)
  {
! 	UnlockAndReleaseBuffer(buf);
  }
  
  /*
***************
*** 166,173 ****
  void
  _hash_wrtbuf(Relation rel, Buffer buf)
  {
! 	LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 	WriteBuffer(buf);
  }
  
  /*
--- 165,171 ----
  void
  _hash_wrtbuf(Relation rel, Buffer buf)
  {
! 	UnlockAndWriteBuffer(buf);
  }
  
  /*
Index: src/backend/access/heap/heapam.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/access/heap/heapam.c,v
retrieving revision 1.157
diff -c -r1.157 heapam.c
*** src/backend/access/heap/heapam.c	1 Oct 2003 21:30:52 -0000	1.157
--- src/backend/access/heap/heapam.c	31 Oct 2003 22:59:14 -0000
***************
*** 899,906 ****
  	 */
  	if (!ItemIdIsUsed(lp))
  	{
! 		LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
! 		ReleaseBuffer(buffer);
  		*userbuf = InvalidBuffer;
  		tuple->t_datamcxt = NULL;
  		tuple->t_data = NULL;
--- 899,905 ----
  	 */
  	if (!ItemIdIsUsed(lp))
  	{
! 		UnlockAndReleaseBuffer(buffer);
  		*userbuf = InvalidBuffer;
  		tuple->t_datamcxt = NULL;
  		tuple->t_data = NULL;
***************
*** 1006,1013 ****
  	}
  	if (invalidBlock)
  	{
! 		LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
! 		ReleaseBuffer(buffer);
  		return NULL;
  	}
  
--- 1005,1011 ----
  	}
  	if (invalidBlock)
  	{
! 		UnlockAndReleaseBuffer(buffer);
  		return NULL;
  	}
  
***************
*** 1033,1040 ****
  		!ItemPointerEquals(tid, &ctid))
  		linkend = false;
  
! 	LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
! 	ReleaseBuffer(buffer);
  
  	if (!valid)
  	{
--- 1031,1037 ----
  		!ItemPointerEquals(tid, &ctid))
  		linkend = false;
  
! 	UnlockAndReleaseBuffer(buffer);
  
  	if (!valid)
  	{
***************
*** 1174,1181 ****
  
  	END_CRIT_SECTION();
  
! 	LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
! 	WriteBuffer(buffer);
  
  	/*
  	 * If tuple is cachable, mark it for invalidation from the caches in
--- 1171,1177 ----
  
  	END_CRIT_SECTION();
  
! 	UnlockAndWriteBuffer(buffer);
  
  	/*
  	 * If tuple is cachable, mark it for invalidation from the caches in
***************
*** 1253,1260 ****
  
  	if (result == HeapTupleInvisible)
  	{
! 		LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
! 		ReleaseBuffer(buffer);
  		elog(ERROR, "attempted to delete invisible tuple");
  	}
  	else if (result == HeapTupleBeingUpdated && wait)
--- 1249,1255 ----
  
  	if (result == HeapTupleInvisible)
  	{
! 		UnlockAndReleaseBuffer(buffer);
  		elog(ERROR, "attempted to delete invisible tuple");
  	}
  	else if (result == HeapTupleBeingUpdated && wait)
***************
*** 1301,1308 ****
  			   result == HeapTupleUpdated ||
  			   result == HeapTupleBeingUpdated);
  		*ctid = tp.t_data->t_ctid;
! 		LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
! 		ReleaseBuffer(buffer);
  		return result;
  	}
  
--- 1296,1302 ----
  			   result == HeapTupleUpdated ||
  			   result == HeapTupleBeingUpdated);
  		*ctid = tp.t_data->t_ctid;
! 		UnlockAndReleaseBuffer(buffer);
  		return result;
  	}
  
***************
*** 1483,1490 ****
  
  	if (result == HeapTupleInvisible)
  	{
! 		LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
! 		ReleaseBuffer(buffer);
  		elog(ERROR, "attempted to update invisible tuple");
  	}
  	else if (result == HeapTupleBeingUpdated && wait)
--- 1477,1483 ----
  
  	if (result == HeapTupleInvisible)
  	{
! 		UnlockAndReleaseBuffer(buffer);
  		elog(ERROR, "attempted to update invisible tuple");
  	}
  	else if (result == HeapTupleBeingUpdated && wait)
***************
*** 1531,1538 ****
  			   result == HeapTupleUpdated ||
  			   result == HeapTupleBeingUpdated);
  		*ctid = oldtup.t_data->t_ctid;
! 		LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
! 		ReleaseBuffer(buffer);
  		return result;
  	}
  
--- 1524,1530 ----
  			   result == HeapTupleUpdated ||
  			   result == HeapTupleBeingUpdated);
  		*ctid = oldtup.t_data->t_ctid;
! 		UnlockAndReleaseBuffer(buffer);
  		return result;
  	}
  
***************
*** 1808,1815 ****
  
  	if (result == HeapTupleInvisible)
  	{
! 		LockBuffer(*buffer, BUFFER_LOCK_UNLOCK);
! 		ReleaseBuffer(*buffer);
  		elog(ERROR, "attempted to mark4update invisible tuple");
  	}
  	else if (result == HeapTupleBeingUpdated)
--- 1800,1806 ----
  
  	if (result == HeapTupleInvisible)
  	{
! 		UnlockAndReleaseBuffer(*buffer);
  		elog(ERROR, "attempted to mark4update invisible tuple");
  	}
  	else if (result == HeapTupleBeingUpdated)
Index: src/backend/access/index/indexam.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/access/index/indexam.c,v
retrieving revision 1.71
diff -c -r1.71 indexam.c
*** src/backend/access/index/indexam.c	25 Sep 2003 06:57:57 -0000	1.71
--- src/backend/access/index/indexam.c	31 Oct 2003 23:00:00 -0000
***************
*** 541,548 ****
  
  		if (sv_infomask != heapTuple->t_data->t_infomask)
  			SetBufferCommitInfoNeedsSave(scan->xs_cbuf);
! 		LockBuffer(scan->xs_cbuf, BUFFER_LOCK_UNLOCK);
! 		ReleaseBuffer(scan->xs_cbuf);
  		scan->xs_cbuf = InvalidBuffer;
  	}
  
--- 541,547 ----
  
  		if (sv_infomask != heapTuple->t_data->t_infomask)
  			SetBufferCommitInfoNeedsSave(scan->xs_cbuf);
! 		UnlockAndReleaseBuffer(scan->xs_cbuf);
  		scan->xs_cbuf = InvalidBuffer;
  	}
  
Index: src/backend/access/nbtree/nbtinsert.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/access/nbtree/nbtinsert.c,v
retrieving revision 1.106
diff -c -r1.106 nbtinsert.c
*** src/backend/access/nbtree/nbtinsert.c	25 Sep 2003 06:57:57 -0000	1.106
--- src/backend/access/nbtree/nbtinsert.c	31 Oct 2003 23:00:35 -0000
***************
*** 274,281 ****
  					}
  					if (sv_infomask != htup.t_data->t_infomask)
  						SetBufferCommitInfoNeedsSave(hbuffer);
! 					LockBuffer(hbuffer, BUFFER_LOCK_UNLOCK);
! 					ReleaseBuffer(hbuffer);
  				}
  			}
  		}
--- 274,280 ----
  					}
  					if (sv_infomask != htup.t_data->t_infomask)
  						SetBufferCommitInfoNeedsSave(hbuffer);
! 					UnlockAndReleaseBuffer(hbuffer);
  				}
  			}
  		}
Index: src/backend/access/nbtree/nbtpage.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/access/nbtree/nbtpage.c,v
retrieving revision 1.72
diff -c -r1.72 nbtpage.c
*** src/backend/access/nbtree/nbtpage.c	29 Sep 2003 23:40:26 -0000	1.72
--- src/backend/access/nbtree/nbtpage.c	31 Oct 2003 23:01:05 -0000
***************
*** 502,509 ****
  void
  _bt_relbuf(Relation rel, Buffer buf)
  {
! 	LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 	ReleaseBuffer(buf);
  }
  
  /*
--- 502,508 ----
  void
  _bt_relbuf(Relation rel, Buffer buf)
  {
! 	UnlockAndReleaseBuffer(buf);
  }
  
  /*
***************
*** 521,528 ****
  void
  _bt_wrtbuf(Relation rel, Buffer buf)
  {
! 	LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 	WriteBuffer(buf);
  }
  
  /*
--- 520,526 ----
  void
  _bt_wrtbuf(Relation rel, Buffer buf)
  {
! 	UnlockAndWriteBuffer(buf);
  }
  
  /*
Index: src/backend/commands/sequence.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/sequence.c,v
retrieving revision 1.103
diff -c -r1.103 sequence.c
*** src/backend/commands/sequence.c	25 Sep 2003 06:57:58 -0000	1.103
--- src/backend/commands/sequence.c	31 Oct 2003 23:02:15 -0000
***************
*** 291,298 ****
  
  	END_CRIT_SECTION();
  
! 	LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 	WriteBuffer(buf);
  	heap_close(rel, NoLock);
  }
  
--- 291,297 ----
  
  	END_CRIT_SECTION();
  
! 	UnlockAndWriteBuffer(buf);
  	heap_close(rel, NoLock);
  }
  
***************
*** 379,388 ****
  
  	END_CRIT_SECTION();
  
! 	LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 
! 	WriteBuffer(buf);
! 
  	relation_close(seqrel, NoLock);
  }
  
--- 378,384 ----
  
  	END_CRIT_SECTION();
  
! 	UnlockAndWriteBuffer(buf);
  	relation_close(seqrel, NoLock);
  }
  
***************
*** 583,592 ****
  
  	END_CRIT_SECTION();
  
! 	LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 
! 	WriteBuffer(buf);
! 
  	relation_close(seqrel, NoLock);
  
  	PG_RETURN_INT64(result);
--- 579,585 ----
  
  	END_CRIT_SECTION();
  
! 	UnlockAndWriteBuffer(buf);
  	relation_close(seqrel, NoLock);
  
  	PG_RETURN_INT64(result);
***************
*** 719,728 ****
  
  	END_CRIT_SECTION();
  
! 	LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 
! 	WriteBuffer(buf);
! 
  	relation_close(seqrel, NoLock);
  }
  
--- 712,718 ----
  
  	END_CRIT_SECTION();
  
! 	UnlockAndWriteBuffer(buf);
  	relation_close(seqrel, NoLock);
  }
  
Index: src/backend/commands/vacuum.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/vacuum.c,v
retrieving revision 1.263
diff -c -r1.263 vacuum.c
*** src/backend/commands/vacuum.c	2 Oct 2003 23:19:44 -0000	1.263
--- src/backend/commands/vacuum.c	31 Oct 2003 23:04:31 -0000
***************
*** 2299,2306 ****
  			page = BufferGetPage(buf);
  			if (!PageIsEmpty(page))
  				vacuum_page(onerel, buf, *curpage);
! 			LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 			WriteBuffer(buf);
  		}
  	}
  
--- 2299,2305 ----
  			page = BufferGetPage(buf);
  			if (!PageIsEmpty(page))
  				vacuum_page(onerel, buf, *curpage);
! 			UnlockAndWriteBuffer(buf);
  		}
  	}
  
***************
*** 2356,2363 ****
  					tuple.t_data->t_infomask |= HEAP_XMIN_INVALID;
  			}
  		}
! 		LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 		WriteBuffer(buf);
  		Assert((*curpage)->offsets_used == num_tuples);
  		checked_moved += num_tuples;
  	}
--- 2355,2361 ----
  					tuple.t_data->t_infomask |= HEAP_XMIN_INVALID;
  			}
  		}
! 		UnlockAndWriteBuffer(buf);
  		Assert((*curpage)->offsets_used == num_tuples);
  		checked_moved += num_tuples;
  	}
***************
*** 2467,2474 ****
  
  			END_CRIT_SECTION();
  
! 			LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 			WriteBuffer(buf);
  		}
  
  		/* now - free new list of reaped pages */
--- 2465,2471 ----
  
  			END_CRIT_SECTION();
  
! 			UnlockAndWriteBuffer(buf);
  		}
  
  		/* now - free new list of reaped pages */
***************
*** 2535,2542 ****
  			buf = ReadBuffer(onerel, (*vacpage)->blkno);
  			LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
  			vacuum_page(onerel, buf, *vacpage);
! 			LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 			WriteBuffer(buf);
  		}
  	}
  
--- 2532,2538 ----
  			buf = ReadBuffer(onerel, (*vacpage)->blkno);
  			LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
  			vacuum_page(onerel, buf, *vacpage);
! 			UnlockAndWriteBuffer(buf);
  		}
  	}
  
Index: src/backend/commands/vacuumlazy.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/vacuumlazy.c,v
retrieving revision 1.32
diff -c -r1.32 vacuumlazy.c
*** src/backend/commands/vacuumlazy.c	25 Sep 2003 06:57:59 -0000	1.32
--- src/backend/commands/vacuumlazy.c	31 Oct 2003 23:03:10 -0000
***************
*** 267,274 ****
  				lazy_record_free_space(vacrelstats, blkno,
  									   PageGetFreeSpace(page));
  			}
! 			LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 			WriteBuffer(buf);
  			continue;
  		}
  
--- 267,273 ----
  				lazy_record_free_space(vacrelstats, blkno,
  									   PageGetFreeSpace(page));
  			}
! 			UnlockAndWriteBuffer(buf);
  			continue;
  		}
  
***************
*** 277,284 ****
  			empty_pages++;
  			lazy_record_free_space(vacrelstats, blkno,
  								   PageGetFreeSpace(page));
! 			LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 			ReleaseBuffer(buf);
  			continue;
  		}
  
--- 276,282 ----
  			empty_pages++;
  			lazy_record_free_space(vacrelstats, blkno,
  								   PageGetFreeSpace(page));
! 			UnlockAndReleaseBuffer(buf);
  			continue;
  		}
  
***************
*** 477,484 ****
  		page = BufferGetPage(buf);
  		lazy_record_free_space(vacrelstats, tblk,
  							   PageGetFreeSpace(page));
! 		LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 		WriteBuffer(buf);
  		npages++;
  	}
  
--- 475,481 ----
  		page = BufferGetPage(buf);
  		lazy_record_free_space(vacrelstats, tblk,
  							   PageGetFreeSpace(page));
! 		UnlockAndWriteBuffer(buf);
  		npages++;
  	}
  
***************
*** 812,819 ****
  		if (PageIsNew(page) || PageIsEmpty(page))
  		{
  			/* PageIsNew robably shouldn't happen... */
! 			LockBuffer(buf, BUFFER_LOCK_UNLOCK);
! 			ReleaseBuffer(buf);
  			continue;
  		}
  
--- 809,815 ----
  		if (PageIsNew(page) || PageIsEmpty(page))
  		{
  			/* PageIsNew robably shouldn't happen... */
! 			UnlockAndReleaseBuffer(buf);
  			continue;
  		}
  
Index: src/backend/storage/buffer/buf_init.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/storage/buffer/buf_init.c,v
retrieving revision 1.54
diff -c -r1.54 buf_init.c
*** src/backend/storage/buffer/buf_init.c	4 Aug 2003 02:40:03 -0000	1.54
--- src/backend/storage/buffer/buf_init.c	31 Oct 2003 22:38:16 -0000
***************
*** 34,50 ****
  #include "utils/hsearch.h"
  #include "utils/memutils.h"
  
- 
- /*
-  *	if BMTRACE is defined, we trace the last 200 buffer allocations and
-  *	deallocations in a circular buffer in shared memory.
-  */
- #ifdef	BMTRACE
- bmtrace    *TraceBuf;
- long	   *CurTraceBuf;
- 
- #define BMT_LIMIT		200
- #endif   /* BMTRACE */
  int			ShowPinTrace = 0;
  
  int			Data_Descriptors;
--- 34,39 ----
***************
*** 144,159 ****
  	 */
  	LWLockAcquire(BufMgrLock, LW_EXCLUSIVE);
  
- #ifdef BMTRACE
- 	CurTraceBuf = (long *) ShmemInitStruct("Buffer trace",
- 							(BMT_LIMIT * sizeof(bmtrace)) + sizeof(long),
- 										   &foundDescs);
- 	if (!foundDescs)
- 		MemSet(CurTraceBuf, 0, (BMT_LIMIT * sizeof(bmtrace)) + sizeof(long));
- 
- 	TraceBuf = (bmtrace *) & (CurTraceBuf[1]);
- #endif
- 
  	BufferDescriptors = (BufferDesc *)
  		ShmemInitStruct("Buffer Descriptors",
  					  Num_Descriptors * sizeof(BufferDesc), &foundDescs);
--- 133,138 ----
***************
*** 266,274 ****
  	/* size of buffer hash table */
  	size += hash_estimate_size(NBuffers, sizeof(BufferLookupEnt));
  
- #ifdef BMTRACE
- 	size += (BMT_LIMIT * sizeof(bmtrace)) + sizeof(long);
- #endif
- 
  	return size;
  }
--- 245,249 ----
Index: src/backend/storage/buffer/buf_table.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/storage/buffer/buf_table.c,v
retrieving revision 1.29
diff -c -r1.29 buf_table.c
*** src/backend/storage/buffer/buf_table.c	4 Aug 2003 02:40:03 -0000	1.29
--- src/backend/storage/buffer/buf_table.c	31 Oct 2003 22:30:34 -0000
***************
*** 133,147 ****
  	result->id = buf->buf_id;
  	return TRUE;
  }
- 
- /* prints out collision stats for the buf table */
- #ifdef NOT_USED
- void
- DBG_LookupListCheck(int nlookup)
- {
- 	nlookup = 10;
- 
- 	hash_stats("Shared", SharedBufHash);
- }
- 
- #endif
--- 133,135 ----
Index: src/backend/storage/buffer/bufmgr.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/storage/buffer/bufmgr.c,v
retrieving revision 1.141
diff -c -r1.141 bufmgr.c
*** src/backend/storage/buffer/bufmgr.c	25 Sep 2003 06:58:01 -0000	1.141
--- src/backend/storage/buffer/bufmgr.c	31 Oct 2003 22:46:35 -0000
***************
*** 105,117 ****
   *
   * Note: a side effect of a P_NEW call is to update reln->rd_nblocks.
   */
- 
- #undef ReadBuffer				/* conflicts with macro when BUFMGR_DEBUG
- 								 * defined */
- 
- /*
-  * ReadBuffer
-  */
  Buffer
  ReadBuffer(Relation reln, BlockNumber blockNum)
  {
--- 105,110 ----
***************
*** 358,366 ****
  			 */
  			*foundPtr = FALSE;
  		}
- #ifdef BMTRACE
- 		_bm_trace((reln->rd_rel->relisshared ? 0 : MyDatabaseId), RelationGetRelid(reln), blockNum, BufferDescriptorGetBuffer(buf), BMT_ALLOCFND);
- #endif   /* BMTRACE */
  
  		if (!(*foundPtr))
  			StartBufferIO(buf, true);
--- 351,356 ----
***************
*** 569,578 ****
  	else
  		ContinueBufferIO(buf, true);
  
- #ifdef BMTRACE
- 	_bm_trace((reln->rd_rel->relisshared ? 0 : MyDatabaseId), RelationGetRelid(reln), blockNum, BufferDescriptorGetBuffer(buf), BMT_ALLOCNOTFND);
- #endif   /* BMTRACE */
- 
  	LWLockRelease(BufMgrLock);
  
  	return buf;
--- 559,564 ----
***************
*** 619,627 ****
   * Side Effects:
   *		Pin count is decremented.
   */
- 
- #undef WriteBuffer
- 
  void
  WriteBuffer(Buffer buffer)
  {
--- 605,610 ----
***************
*** 638,645 ****
  	write_buffer(buffer, false);
  }
  
- 
- #undef ReleaseAndReadBuffer
  /*
   * ReleaseAndReadBuffer -- combine ReleaseBuffer() and ReadBuffer()
   *		to save a lock release/acquire.
--- 621,626 ----
***************
*** 1099,1105 ****
  	 * new or temp, because no one else should be modifying it.  Otherwise
  	 * we need to ask the smgr for the current physical file length.
  	 *
! 	 * Don't call smgr on a view, either.
  	 */
  	if (relation->rd_rel->relkind == RELKIND_VIEW)
  		relation->rd_nblocks = 0;
--- 1080,1086 ----
  	 * new or temp, because no one else should be modifying it.  Otherwise
  	 * we need to ask the smgr for the current physical file length.
  	 *
! 	 * Don't call smgr on a view or a composite type, either.
  	 */
  	if (relation->rd_rel->relkind == RELKIND_VIEW)
  		relation->rd_nblocks = 0;
***************
*** 1107,1112 ****
--- 1088,1094 ----
  		relation->rd_nblocks = 0;
  	else if (!relation->rd_isnew && !relation->rd_istemp)
  		relation->rd_nblocks = smgrnblocks(DEFAULT_SMGR, relation);
+ 
  	return relation->rd_nblocks;
  }
  
***************
*** 1555,1562 ****
  	return 0;
  }
  
- #undef ReleaseBuffer
- 
  /*
   * ReleaseBuffer -- remove the pin on a buffer without
   *		marking it dirty.
--- 1537,1542 ----
***************
*** 1669,1819 ****
  }
  #endif
  
- #ifdef BMTRACE
- 
- /*
-  *	trace allocations and deallocations in a circular buffer in
-  *	shared memory.	check the buffer before doing the allocation,
-  *	and die if there's anything fishy.
-  */
- 
- void
- _bm_trace(Oid dbId, Oid relId, int blkNo, int bufNo, int allocType)
- {
- 	long		start,
- 				cur;
- 	bmtrace    *tb;
- 
- 	start = *CurTraceBuf;
- 
- 	if (start > 0)
- 		cur = start - 1;
- 	else
- 		cur = BMT_LIMIT - 1;
- 
- 	for (;;)
- 	{
- 		tb = &TraceBuf[cur];
- 		if (tb->bmt_op != BMT_NOTUSED)
- 		{
- 			if (tb->bmt_buf == bufNo)
- 			{
- 				if ((tb->bmt_op == BMT_DEALLOC)
- 					|| (tb->bmt_dbid == dbId && tb->bmt_relid == relId
- 						&& tb->bmt_blkno == blkNo))
- 					goto okay;
- 
- 				/* die holding the buffer lock */
- 				_bm_die(dbId, relId, blkNo, bufNo, allocType, start, cur);
- 			}
- 		}
- 
- 		if (cur == start)
- 			goto okay;
- 
- 		if (cur == 0)
- 			cur = BMT_LIMIT - 1;
- 		else
- 			cur--;
- 	}
- 
- okay:
- 	tb = &TraceBuf[start];
- 	tb->bmt_pid = MyProcPid;
- 	tb->bmt_buf = bufNo;
- 	tb->bmt_dbid = dbId;
- 	tb->bmt_relid = relId;
- 	tb->bmt_blkno = blkNo;
- 	tb->bmt_op = allocType;
- 
- 	*CurTraceBuf = (start + 1) % BMT_LIMIT;
- }
- 
- void
- _bm_die(Oid dbId, Oid relId, int blkNo, int bufNo,
- 		int allocType, long start, long cur)
- {
- 	FILE	   *fp;
- 	bmtrace    *tb;
- 	int			i;
- 
- 	tb = &TraceBuf[cur];
- 
- 	if ((fp = AllocateFile("/tmp/death_notice", "w")) == NULL)
- 		elog(FATAL, "buffer alloc trace error and can't open log file");
- 
- 	fprintf(fp, "buffer alloc trace detected the following error:\n\n");
- 	fprintf(fp, "    buffer %d being %s inconsistently with a previous %s\n\n",
- 		 bufNo, (allocType == BMT_DEALLOC ? "deallocated" : "allocated"),
- 			(tb->bmt_op == BMT_DEALLOC ? "deallocation" : "allocation"));
- 
- 	fprintf(fp, "the trace buffer contains:\n");
- 
- 	i = start;
- 	for (;;)
- 	{
- 		tb = &TraceBuf[i];
- 		if (tb->bmt_op != BMT_NOTUSED)
- 		{
- 			fprintf(fp, "     [%3d]%spid %d buf %2d for <%u,%u,%u> ",
- 					i, (i == cur ? " ---> " : "\t"),
- 					tb->bmt_pid, tb->bmt_buf,
- 					tb->bmt_dbid, tb->bmt_relid, tb->bmt_blkno);
- 
- 			switch (tb->bmt_op)
- 			{
- 				case BMT_ALLOCFND:
- 					fprintf(fp, "allocate (found)\n");
- 					break;
- 
- 				case BMT_ALLOCNOTFND:
- 					fprintf(fp, "allocate (not found)\n");
- 					break;
- 
- 				case BMT_DEALLOC:
- 					fprintf(fp, "deallocate\n");
- 					break;
- 
- 				default:
- 					fprintf(fp, "unknown op type %d\n", tb->bmt_op);
- 					break;
- 			}
- 		}
- 
- 		i = (i + 1) % BMT_LIMIT;
- 		if (i == start)
- 			break;
- 	}
- 
- 	fprintf(fp, "\noperation causing error:\n");
- 	fprintf(fp, "\tpid %d buf %d for <%d,%u,%d> ",
- 			getpid(), bufNo, dbId, relId, blkNo);
- 
- 	switch (allocType)
- 	{
- 		case BMT_ALLOCFND:
- 			fprintf(fp, "allocate (found)\n");
- 			break;
- 
- 		case BMT_ALLOCNOTFND:
- 			fprintf(fp, "allocate (not found)\n");
- 			break;
- 
- 		case BMT_DEALLOC:
- 			fprintf(fp, "deallocate\n");
- 			break;
- 
- 		default:
- 			fprintf(fp, "unknown op type %d\n", allocType);
- 			break;
- 	}
- 
- 	FreeFile(fp);
- 
- 	kill(getpid(), SIGILL);
- }
- #endif   /* BMTRACE */
- 
  /*
   * SetBufferCommitInfoNeedsSave
   *
--- 1649,1654 ----
Index: src/backend/storage/buffer/freelist.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/storage/buffer/freelist.c,v
retrieving revision 1.31
diff -c -r1.31 freelist.c
*** src/backend/storage/buffer/freelist.c	4 Aug 2003 02:40:03 -0000	1.31
--- src/backend/storage/buffer/freelist.c	31 Oct 2003 22:50:11 -0000
***************
*** 32,40 ****
  #include "storage/ipc.h"
  #include "storage/proc.h"
  
- 
  static BufferDesc *SharedFreeList;
  
  /*
   * State-checking macros
   */
--- 32,41 ----
  #include "storage/ipc.h"
  #include "storage/proc.h"
  
  static BufferDesc *SharedFreeList;
  
+ #define INVALID_DESCRIPTOR (-3)
+ 
  /*
   * State-checking macros
   */
***************
*** 65,74 ****
  static void
  AddBufferToFreelist(BufferDesc *bf)
  {
- #ifdef BMTRACE
- 	_bm_trace(bf->tag.relId.dbId, bf->tag.relId.relId, bf->tag.blockNum,
- 			  BufferDescriptorGetBuffer(bf), BMT_DEALLOC);
- #endif   /* BMTRACE */
  	IsNotInQueue(bf);
  
  	/* change bf so it points to inFrontOfNew and its successor */
--- 66,71 ----
Index: src/include/storage/buf_internals.h
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/include/storage/buf_internals.h,v
retrieving revision 1.61
diff -c -r1.61 buf_internals.h
*** src/include/storage/buf_internals.h	4 Aug 2003 02:40:14 -0000	1.61
--- src/include/storage/buf_internals.h	31 Oct 2003 22:37:19 -0000
***************
*** 33,46 ****
   * Flags for buffer descriptors
   */
  #define BM_DIRTY				(1 << 0)
! #define BM_PRIVATE				(1 << 1)
! #define BM_VALID				(1 << 2)
! #define BM_DELETED				(1 << 3)
! #define BM_FREE					(1 << 4)
! #define BM_IO_IN_PROGRESS		(1 << 5)
! #define BM_IO_ERROR				(1 << 6)
! #define BM_JUST_DIRTIED			(1 << 7)
! #define BM_PIN_COUNT_WAITER		(1 << 8)
  
  typedef bits16 BufFlags;
  
--- 33,45 ----
   * Flags for buffer descriptors
   */
  #define BM_DIRTY				(1 << 0)
! #define BM_VALID				(1 << 1)
! #define BM_DELETED				(1 << 2)
! #define BM_FREE					(1 << 3)
! #define BM_IO_IN_PROGRESS		(1 << 4)
! #define BM_IO_ERROR				(1 << 5)
! #define BM_JUST_DIRTIED			(1 << 6)
! #define BM_PIN_COUNT_WAITER		(1 << 7)
  
  typedef bits16 BufFlags;
  
***************
*** 123,154 ****
  	Buffer		id;
  } BufferLookupEnt;
  
- /*
-  *	mao tracing buffer allocation
-  */
- 
- /*#define BMTRACE*/
- 
- #ifdef BMTRACE
- 
- typedef struct _bmtrace
- {
- 	int			bmt_pid;
- 	int			bmt_buf;
- 	Oid			bmt_dbid;
- 	Oid			bmt_relid;
- 	BlockNumber bmt_blkno;
- 	int			bmt_op;
- 
- #define BMT_NOTUSED		0
- #define BMT_ALLOCFND	1
- #define BMT_ALLOCNOTFND 2
- #define BMT_DEALLOC		3
- 
- }	bmtrace;
- #endif   /* BMTRACE */
- 
- 
  /* counters in buf_init.c */
  extern long int ReadBufferCount;
  extern long int ReadLocalBufferCount;
--- 122,127 ----
Index: src/include/storage/bufmgr.h
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/include/storage/bufmgr.h,v
retrieving revision 1.70
diff -c -r1.70 bufmgr.h
*** src/include/storage/bufmgr.h	10 Aug 2003 19:48:08 -0000	1.70
--- src/include/storage/bufmgr.h	31 Oct 2003 22:50:16 -0000
***************
*** 52,58 ****
   */
  
  #define BAD_BUFFER_ID(bid) ((bid) < 1 || (bid) > NBuffers)
- #define INVALID_DESCRIPTOR (-3)
  
  #define UnlockAndReleaseBuffer(buffer)	\
  ( \
--- 52,57 ----
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
      subscribe-nomail command to [EMAIL PROTECTED] so that your
      message can get through to the mailing list cleanly

Reply via email to