Improve LOCK_DEBUG logging code for LWLocks.
authorTom Lane <[email protected]>
Fri, 28 Dec 2001 23:26:04 +0000 (23:26 +0000)
committerTom Lane <[email protected]>
Fri, 28 Dec 2001 23:26:04 +0000 (23:26 +0000)
src/backend/storage/lmgr/lwlock.c

index e8e02de41a80e1f320d036ef1b17418df889d433..322bee64382b971545b985b7564593a1270455da 100644 (file)
@@ -64,7 +64,7 @@ static LWLockId held_lwlocks[MAX_SIMUL_LWLOCKS];
 bool           Trace_lwlocks = false;
 
 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)
                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);
 }
 
+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 */
 #define PRINT_LWDEBUG(a,b,c)
+#define LOG_LWDEBUG(a,b,c)
 #endif   /* LOCK_DEBUG */
 
 
@@ -265,6 +274,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
                 * received, so that the lock manager or signal manager will see
                 * the received signal when it next waits.
                 */
+               LOG_LWDEBUG("LWLockAcquire", lockid, "waiting");
+
                for (;;)
                {
                        /* "false" means cannot accept cancel/die interrupt here. */
@@ -274,6 +285,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
                        extraWaits++;
                }
 
+               LOG_LWDEBUG("LWLockAcquire", lockid, "awakened");
+
                /*
                 * 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
@@ -352,6 +365,7 @@ LWLockConditionalAcquire(LWLockId lockid, LWLockMode mode)
        {
                /* Failed to get lock, so release interrupt holdoff */
                RESUME_INTERRUPTS();
+               LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed");
        }
        else
        {
@@ -448,6 +462,7 @@ LWLockRelease(LWLockId lockid)
         */
        while (head != NULL)
        {
+               LOG_LWDEBUG("LWLockRelease", lockid, "release waiter");
                proc = head;
                head = proc->lwWaitLink;
                proc->lwWaitLink = NULL;