Only log 'process acquired lock' if we actually did get the lock. This
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 19 Jun 2007 22:01:15 +0000 (22:01 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 19 Jun 2007 22:01:15 +0000 (22:01 +0000)
test seems inessential right now since the only control path for not
getting the lock is via CHECK_FOR_INTERRUPTS which won't return control
to ProcSleep, but it would be important if we ever allow the deadlock
code to kill someone else's transaction instead of our own.

src/backend/storage/lmgr/proc.c

index d8cc9e1175898f800c4e37adbfd98d1b09f9c970..367c0e6cf813bfea20cf5ea2ac0eefc9ef6e3b77 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/storage/lmgr/proc.c,v 1.189 2007/06/19 20:13:21 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/storage/lmgr/proc.c,v 1.190 2007/06/19 22:01:15 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -887,7 +887,7 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
            switch (deadlock_state)
            {
                case DS_NOT_YET_CHECKED:
-                   /* Spurious wakeup as described above */
+                   /* Lock granted, or spurious wakeup as described above */
                    break; 
                case DS_NO_DEADLOCK:
                case DS_SOFT_DEADLOCK:
@@ -918,16 +918,17 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
                                (errmsg("process %d still waiting for %s on %s after %ld.%03d ms",
                                        MyProcPid, modename, buf.data,
                                        msecs, usecs)));
-                   else
+                   else if (MyProc->waitStatus == STATUS_OK)
                        ereport(LOG,
                                (errmsg("process %d acquired %s on %s after %ld.%03d ms",
                                        MyProcPid, modename, buf.data,
                                        msecs, usecs)));
+                   /* ERROR will be reported later, so no message here */
                    pfree(buf.data);
                    break;
                }
                case DS_HARD_DEADLOCK:
-                   /* ERROR will be reported below, so no message here */
+                   /* ERROR will be reported later, so no message here */
                    break; 
            }
        }