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