mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Improve LOCK_DEBUG logging code for LWLocks.
This commit is contained in:
parent
ce286ff6b5
commit
198152730b
@ -15,7 +15,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lwlock.c,v 1.4 2001/12/10 21:13:50 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lwlock.c,v 1.5 2001/12/28 23:26:04 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -64,7 +64,7 @@ static LWLockId held_lwlocks[MAX_SIMUL_LWLOCKS];
|
|||||||
bool Trace_lwlocks = false;
|
bool Trace_lwlocks = false;
|
||||||
|
|
||||||
inline static void
|
inline static void
|
||||||
PRINT_LWDEBUG(const char *where, LWLockId lockid, const LWLock *lock)
|
PRINT_LWDEBUG(const char *where, LWLockId lockid, const volatile LWLock *lock)
|
||||||
{
|
{
|
||||||
if (Trace_lwlocks)
|
if (Trace_lwlocks)
|
||||||
elog(DEBUG, "%s(%d): excl %d shared %d head %p",
|
elog(DEBUG, "%s(%d): excl %d shared %d head %p",
|
||||||
@ -72,8 +72,17 @@ PRINT_LWDEBUG(const char *where, LWLockId lockid, const LWLock *lock)
|
|||||||
(int) lock->exclusive, lock->shared, lock->head);
|
(int) lock->exclusive, lock->shared, lock->head);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline static void
|
||||||
|
LOG_LWDEBUG(const char *where, LWLockId lockid, const char *msg)
|
||||||
|
{
|
||||||
|
if (Trace_lwlocks)
|
||||||
|
elog(DEBUG, "%s(%d): %s",
|
||||||
|
where, (int) lockid, msg);
|
||||||
|
}
|
||||||
|
|
||||||
#else /* not LOCK_DEBUG */
|
#else /* not LOCK_DEBUG */
|
||||||
#define PRINT_LWDEBUG(a,b,c)
|
#define PRINT_LWDEBUG(a,b,c)
|
||||||
|
#define LOG_LWDEBUG(a,b,c)
|
||||||
#endif /* LOCK_DEBUG */
|
#endif /* LOCK_DEBUG */
|
||||||
|
|
||||||
|
|
||||||
@ -265,6 +274,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
|
|||||||
* received, so that the lock manager or signal manager will see
|
* received, so that the lock manager or signal manager will see
|
||||||
* the received signal when it next waits.
|
* the received signal when it next waits.
|
||||||
*/
|
*/
|
||||||
|
LOG_LWDEBUG("LWLockAcquire", lockid, "waiting");
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
/* "false" means cannot accept cancel/die interrupt here. */
|
/* "false" means cannot accept cancel/die interrupt here. */
|
||||||
@ -274,6 +285,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
|
|||||||
extraWaits++;
|
extraWaits++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_LWDEBUG("LWLockAcquire", lockid, "awakened");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The awakener already updated the lock struct's state, so we
|
* The awakener already updated the lock struct's state, so we
|
||||||
* don't need to do anything more to it. Just need to fix the
|
* don't need to do anything more to it. Just need to fix the
|
||||||
@ -352,6 +365,7 @@ LWLockConditionalAcquire(LWLockId lockid, LWLockMode mode)
|
|||||||
{
|
{
|
||||||
/* Failed to get lock, so release interrupt holdoff */
|
/* Failed to get lock, so release interrupt holdoff */
|
||||||
RESUME_INTERRUPTS();
|
RESUME_INTERRUPTS();
|
||||||
|
LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -448,6 +462,7 @@ LWLockRelease(LWLockId lockid)
|
|||||||
*/
|
*/
|
||||||
while (head != NULL)
|
while (head != NULL)
|
||||||
{
|
{
|
||||||
|
LOG_LWDEBUG("LWLockRelease", lockid, "release waiter");
|
||||||
proc = head;
|
proc = head;
|
||||||
head = proc->lwWaitLink;
|
head = proc->lwWaitLink;
|
||||||
proc->lwWaitLink = NULL;
|
proc->lwWaitLink = NULL;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user