mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
bufmgr: fewer calls to BufferDescriptorGetContentLock
We're planning to merge buffer content locks into BufferDesc.state. To reduce the size of that patch, centralize calls to BufferDescriptorGetContentLock(). The biggest part of the change is in assertions, by introducing BufferIsLockedByMe[InMode]() (and removing BufferIsExclusiveLocked()). This seems like an improvement even without aforementioned plans. Additionally replace some direct calls to LWLockAcquire() with calls to LockBuffer(). Reviewed-by: Matthias van de Meent <boekewurm+postgres@gmail.com> Discussion: https://postgr.es/m/fvfmkr5kk4nyex56ejgxj3uzi63isfxovp2biecb4bspbjrze7@az2pljabhnff
This commit is contained in:
@@ -270,7 +270,8 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
|
||||
if (BufferIsValid(heapBuf) && BufferGetBlockNumber(heapBuf) != heapBlk)
|
||||
elog(ERROR, "wrong heap buffer passed to visibilitymap_set");
|
||||
|
||||
Assert(!BufferIsValid(heapBuf) || BufferIsExclusiveLocked(heapBuf));
|
||||
Assert(!BufferIsValid(heapBuf) ||
|
||||
BufferIsLockedByMeInMode(heapBuf, BUFFER_LOCK_EXCLUSIVE));
|
||||
|
||||
/* Check that we have the right VM page pinned */
|
||||
if (!BufferIsValid(vmBuf) || BufferGetBlockNumber(vmBuf) != mapBlock)
|
||||
|
||||
@@ -258,7 +258,8 @@ XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
|
||||
*/
|
||||
#ifdef USE_ASSERT_CHECKING
|
||||
if (!(flags & REGBUF_NO_CHANGE))
|
||||
Assert(BufferIsExclusiveLocked(buffer) && BufferIsDirty(buffer));
|
||||
Assert(BufferIsLockedByMeInMode(buffer, BUFFER_LOCK_EXCLUSIVE) &&
|
||||
BufferIsDirty(buffer));
|
||||
#endif
|
||||
|
||||
if (block_id >= max_registered_block_id)
|
||||
|
||||
Reference in New Issue
Block a user