Commit 19815273 authored by Tom Lane's avatar Tom Lane

Improve LOCK_DEBUG logging code for LWLocks.

parent ce286ff6
...@@ -15,7 +15,7 @@ ...@@ -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]; ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment