0004-Move-TRACE-calls-into-WaitOnLock.patch
text/x-patch
Filename: 0004-Move-TRACE-calls-into-WaitOnLock.patch
Type: text/x-patch
Part: 3
Message:
Re: Latches vs lwlock contention
Patch
Format: format-patch
Series: patch 0004
Subject: Move TRACE calls into WaitOnLock()
| File | + | − |
|---|---|---|
| src/backend/storage/lmgr/lock.c | 14 | 15 |
From 05b8b4a7222795377f0a967b6408e61aa6b8c62f Mon Sep 17 00:00:00 2001
From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Mon, 22 Jul 2024 13:12:57 +0300
Subject: [PATCH 4/8] Move TRACE calls into WaitOnLock()
LockAcquire is a long and complex function. Pushing more stuff to its
subroutines makes it a little more manageable.
---
src/backend/storage/lmgr/lock.c | 29 ++++++++++++++---------------
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c
index 489073259b6..bac950efdf3 100644
--- a/src/backend/storage/lmgr/lock.c
+++ b/src/backend/storage/lmgr/lock.c
@@ -1052,23 +1052,8 @@ LockAcquireExtended(const LOCKTAG *locktag,
* case, because while trying to go to sleep, we may discover that we
* can acquire the lock immediately after all.
*/
-
- TRACE_POSTGRESQL_LOCK_WAIT_START(locktag->locktag_field1,
- locktag->locktag_field2,
- locktag->locktag_field3,
- locktag->locktag_field4,
- locktag->locktag_type,
- lockmode);
-
WaitOnLock(locallock, owner, dontWait);
- TRACE_POSTGRESQL_LOCK_WAIT_DONE(locktag->locktag_field1,
- locktag->locktag_field2,
- locktag->locktag_field3,
- locktag->locktag_field4,
- locktag->locktag_type,
- lockmode);
-
/*
* NOTE: do not do any material change of state between here and
* return. All required changes in locktable state must have been
@@ -1812,6 +1797,13 @@ WaitOnLock(LOCALLOCK *locallock, ResourceOwner owner, bool dontWait)
LOCKMETHODID lockmethodid = LOCALLOCK_LOCKMETHOD(*locallock);
LockMethod lockMethodTable = LockMethods[lockmethodid];
+ TRACE_POSTGRESQL_LOCK_WAIT_START(locallock->tag.lock.locktag_field1,
+ locallock->tag.lock.locktag_field2,
+ locallock->tag.lock.locktag_field3,
+ locallock->tag.lock.locktag_field4,
+ locallock->tag.lock.locktag_type,
+ locallock->tag.mode);
+
LOCK_PRINT("WaitOnLock: sleeping on lock",
locallock->lock, locallock->tag.mode);
@@ -1882,6 +1874,13 @@ WaitOnLock(LOCALLOCK *locallock, ResourceOwner owner, bool dontWait)
LOCK_PRINT("WaitOnLock: wakeup on lock",
locallock->lock, locallock->tag.mode);
+
+ TRACE_POSTGRESQL_LOCK_WAIT_DONE(locallock->tag.lock.locktag_field1,
+ locallock->tag.lock.locktag_field2,
+ locallock->tag.lock.locktag_field3,
+ locallock->tag.lock.locktag_field4,
+ locallock->tag.lock.locktag_type,
+ locallock->tag.mode);
}
/*
--
2.39.2