*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.158 2003/11/29 19:51:40 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.159 2003/12/14 00:34:47 neilc Exp $
*
*
* INTERFACE ROUTINES
if (XLByteLE(lsn, PageGetLSN(page)))
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return;
}
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID); /* prev sui */
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
static void
{
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return;
}
}
htup->t_ctid = xlrec->target.tid;
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
return;
}
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return;
}
elog(PANIC, "heap_insert_redo: failed to add tuple");
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID); /* prev sui */
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
return;
}
{
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
if (samepage)
return;
goto newt;
goto newsame;
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
goto newt;
}
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return;
}
elog(PANIC, "heap_update_redo: failed to add tuple");
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID); /* prev sui */
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
return;
}
elog(PANIC, "_heap_unlock_tuple: invalid xmax in rollback");
htup->t_infomask &= ~HEAP_XMAX_UNLOGGED;
htup->t_infomask |= HEAP_XMAX_INVALID;
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
return;
}
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.8 2003/11/29 19:51:40 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.9 2003/12/14 00:34:47 neilc Exp $
*
*-------------------------------------------------------------------------
*/
btitem = (BTItem) PageGetItem(page, PageGetItemId(page, offnum));
rightblk = ItemPointerGetBlockNumber(&(btitem->bti_itup.t_tid));
Assert(ItemPointerGetOffsetNumber(&(btitem->bti_itup.t_tid)) == P_HIKEY);
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
foreach(l, incomplete_splits)
{
PageSetLSN(metapg, lsn);
PageSetSUI(metapg, ThisStartUpID);
- UnlockAndWriteBuffer(metabuf);
+ LockBuffer(metabuf, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(metabuf);
}
static void
if (redo)
{
if (XLByteLE(lsn, PageGetLSN(page)))
- UnlockAndReleaseBuffer(buffer);
+ {
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
+ }
else
{
if (PageAddItem(page, (Item) datapos, datalen,
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
}
else
elog(PANIC, "btree_insert_undo: bad page LSN");
if (!P_ISLEAF(pageop))
- UnlockAndReleaseBuffer(buffer);
+ {
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
+ }
else
elog(PANIC, "btree_insert_undo: unimplemented");
}
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
else
{
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
else
{
elog(PANIC, "btree_split_redo: uninitialized next right page");
if (XLByteLE(lsn, PageGetLSN(page)))
- UnlockAndReleaseBuffer(buffer);
+ {
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
+ }
else
{
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
}
}
if (XLByteLE(lsn, PageGetLSN(page)))
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return;
}
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
static void
if (PageIsNew((PageHeader) page))
elog(PANIC, "btree_delete_page_redo: uninitialized parent page");
if (XLByteLE(lsn, PageGetLSN(page)))
- UnlockAndReleaseBuffer(buffer);
+ {
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
+ }
else
{
OffsetNumber poffset;
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
}
if (PageIsNew((PageHeader) page))
elog(PANIC, "btree_delete_page_redo: uninitialized right sibling");
if (XLByteLE(lsn, PageGetLSN(page)))
- UnlockAndReleaseBuffer(buffer);
+ {
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
+ }
else
{
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
}
if (PageIsNew((PageHeader) page))
elog(PANIC, "btree_delete_page_redo: uninitialized left sibling");
if (XLByteLE(lsn, PageGetLSN(page)))
- UnlockAndReleaseBuffer(buffer);
+ {
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
+ }
else
{
pageop = (BTPageOpaque) PageGetSpecialPointer(page);
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
}
}
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
else
{
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
_bt_restore_meta(reln, lsn,
xlrec->rootblk, xlrec->level,
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.127 2003/12/12 18:45:08 petere Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.128 2003/12/14 00:34:47 neilc Exp $
*
*-------------------------------------------------------------------------
*/
memcpy((char *) page, blk, BLCKSZ);
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
}
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/access/transam/xlogutils.c,v 1.27 2003/11/29 19:51:40 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlogutils.c,v 1.28 2003/12/14 00:34:47 neilc Exp $
*
*-------------------------------------------------------------------------
*/
if (PageIsNew((PageHeader) page) ||
ItemPointerGetOffsetNumber(iptr) > PageGetMaxOffsetNumber(page))
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return (0);
}
lp = PageGetItemId(page, ItemPointerGetOffsetNumber(iptr));
if (!ItemIdIsUsed(lp) || ItemIdDeleted(lp))
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return (0);
}
if (!TransactionIdEquals(HeapTupleHeaderGetXmin(htup), xid) ||
HeapTupleHeaderGetCmin(htup) != cid)
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return (-1);
}
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return (1);
}
if (PageIsNew((PageHeader) page) ||
ItemPointerGetOffsetNumber(iptr) > PageGetMaxOffsetNumber(page))
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return (false);
}
if (PageGetSUI(page) != ThisStartUpID)
{
Assert(PageGetSUI(page) < ThisStartUpID);
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return (true);
}
lp = PageGetItemId(page, ItemPointerGetOffsetNumber(iptr));
if (!ItemIdIsUsed(lp) || ItemIdDeleted(lp))
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return (false);
}
TransactionIdDidAbort(HeapTupleHeaderGetXvac(htup))) ||
TransactionIdDidAbort(HeapTupleHeaderGetXmin(htup)))
{
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return (false);
}
}
- UnlockAndReleaseBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ ReleaseBuffer(buffer);
return (true);
}
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/commands/sequence.c,v 1.105 2003/11/29 19:51:47 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/commands/sequence.c,v 1.106 2003/12/14 00:34:47 neilc Exp $
*
*-------------------------------------------------------------------------
*/
PageSetLSN(page, lsn);
PageSetSUI(page, ThisStartUpID);
- UnlockAndWriteBuffer(buffer);
+ LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
+ WriteBuffer(buffer);
}
void
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.58 2003/11/29 19:51:56 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/buffer/buf_init.c,v 1.59 2003/12/14 00:34:47 neilc Exp $
*
*-------------------------------------------------------------------------
*/
#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;
*/
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",
Data_Descriptors * sizeof(BufferDesc), &foundDescs);
/* size of buffer hash table */
size += hash_estimate_size(NBuffers, sizeof(BufferLookupEnt));
-#ifdef BMTRACE
- size += (BMT_LIMIT * sizeof(bmtrace)) + sizeof(long);
-#endif
-
return size;
}
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/buffer/buf_table.c,v 1.33 2003/11/29 19:51:56 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/buffer/buf_table.c,v 1.34 2003/12/14 00:34:47 neilc Exp $
*
*-------------------------------------------------------------------------
*/
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
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.148 2003/12/01 16:53:19 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/buffer/bufmgr.c,v 1.149 2003/12/14 00:34:47 neilc Exp $
*
*-------------------------------------------------------------------------
*/
bool bufferLockHeld);
static BufferDesc *BufferAlloc(Relation reln, BlockNumber blockNum,
bool *foundPtr);
-static int BufferReplace(BufferDesc *bufHdr);
+static bool BufferReplace(BufferDesc *bufHdr);
#ifdef NOT_USED
void PrintBufferDescs(void);
*
* 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)
{
* This is never going to happen, don't worry about it.
*/
*foundPtr = FALSE;
+ StartBufferIO(buf, true);
}
-#ifdef BMTRACE
- _bm_trace((reln->rd_rel->relisshared ? 0 : MyDatabaseId), RelationGetRelid(reln), blockNum, BufferDescriptorGetBuffer(buf), BMT_ALLOCFND);
-#endif /* BMTRACE */
- if (!(*foundPtr))
- StartBufferIO(buf, true);
LWLockRelease(BufMgrLock);
-
return buf;
}
if (buf->flags & BM_DIRTY || buf->cntxDirty)
{
- bool smok;
+ bool replace_ok;
/*
* skip write error buffers
* Write the buffer out, being careful to release BufMgrLock
* before starting the I/O.
*/
- smok = BufferReplace(buf);
+ replace_ok = BufferReplace(buf);
- if (smok == FALSE)
+ if (replace_ok == false)
{
ereport(WARNING,
(errcode(ERRCODE_IO_ERROR),
buf->tag.blockNum,
buf->tag.rnode.tblNode, buf->tag.rnode.relNode);
}
- else
- buf->flags &= ~BM_DIRTY;
+
+ buf->flags &= ~BM_DIRTY;
buf->cntxDirty = false;
}
WaitIO(buf2);
inProgress = (buf2->flags & BM_IO_IN_PROGRESS);
}
+
if (BUFFER_IS_BROKEN(buf2))
+ {
*foundPtr = FALSE;
-
- if (!(*foundPtr))
StartBufferIO(buf2, true);
- LWLockRelease(BufMgrLock);
+ }
+ LWLockRelease(BufMgrLock);
return buf2;
}
}
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;
*
* Marks buffer contents as dirty (actual write happens later).
*
- * Assume that buffer is pinned. Assume that reln is
- * valid.
+ * 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, false);
}
-
-#undef ReleaseAndReadBuffer
/*
* ReleaseAndReadBuffer -- combine ReleaseBuffer() and ReadBuffer()
* to save a lock release/acquire.
* Since the passed buffer must be pinned, it's OK to examine its block
* number without getting the lock first.
*
- * Note: it is OK to pass buffer = InvalidBuffer, indicating that no old
+ * Note: it is OK to pass buffer == InvalidBuffer, indicating that no old
* buffer actually needs to be released. This case is the same as ReadBuffer,
* but can save some tests in the caller.
*
/*
* BufferReplace
*
- * Write out the buffer corresponding to 'bufHdr'
+ * Write out the buffer corresponding to 'bufHdr'. Returns 'true' if
+ * the buffer was successfully written out, 'false' otherwise.
*
* BufMgrLock must be held at entry, and the buffer must be pinned.
*/
-static int
+static bool
BufferReplace(BufferDesc *bufHdr)
{
Relation reln;
LWLockAcquire(BufMgrLock, LW_EXCLUSIVE);
if (status == SM_FAIL)
- return FALSE;
+ return false;
BufferFlushCount++;
- return TRUE;
+ return true;
}
/*
* 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.
+ * Don't call smgr on a view or a composite type, either.
*/
if (relation->rd_rel->relkind == RELKIND_VIEW)
relation->rd_nblocks = 0;
relation->rd_nblocks = 0;
else if (!relation->rd_isnew && !relation->rd_istemp)
relation->rd_nblocks = smgrnblocks(DEFAULT_SMGR, relation);
+
return relation->rd_nblocks;
}
return 0;
}
-#undef ReleaseBuffer
-
/*
* ReleaseBuffer -- remove the pin on a buffer without
* marking it dirty.
}
#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
*
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/storage/buf_internals.h,v 1.65 2003/11/29 22:41:13 pgsql Exp $
+ * $PostgreSQL: pgsql/src/include/storage/buf_internals.h,v 1.66 2003/12/14 00:34:47 neilc Exp $
*
*-------------------------------------------------------------------------
*/
* 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)
+#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;
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;
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.72 2003/11/29 22:41:13 pgsql Exp $
+ * $PostgreSQL: pgsql/src/include/storage/bufmgr.h,v 1.73 2003/12/14 00:34:47 neilc Exp $
*
*-------------------------------------------------------------------------
*/
*/
#define BAD_BUFFER_ID(bid) ((bid) < 1 || (bid) > NBuffers)
-#define INVALID_DESCRIPTOR (-3)
-
-#define UnlockAndReleaseBuffer(buffer) \
-( \
- LockBuffer(buffer, BUFFER_LOCK_UNLOCK), \
- ReleaseBuffer(buffer) \
-)
-
-#define UnlockAndWriteBuffer(buffer) \
-( \
- LockBuffer(buffer, BUFFER_LOCK_UNLOCK), \
- WriteBuffer(buffer) \
-)
/*
* BufferIsValid