Lock cleanup
authorBruce Momjian
Wed, 28 Jan 1998 06:52:58 +0000 (06:52 +0000)
committerBruce Momjian
Wed, 28 Jan 1998 06:52:58 +0000 (06:52 +0000)
src/backend/storage/lmgr/lock.c

index e218a4034257131a1946d6a5fe5499e9ca65bddd..7a444a15fab83fedec13e3e9efd7be4eb8fe8999 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.24 1998/01/28 02:29:27 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.25 1998/01/28 06:52:58 momjian Exp $
  *
  * NOTES
  *   Outside modules can create a lock table and acquire/release
@@ -1456,13 +1456,14 @@ DeadLockCheck(SHM_QUEUE *lockQueue, LOCK *findlock, bool skip_check)
        item.tag.pid = pid;
 #endif
    
-       if ((result = (XIDLookupEnt *)
-             hash_search(xidTable, (Pointer) &item, HASH_FIND, &found)) && found)
-           MyNHolding = result->nHolding;
-       else
-           MyNHolding = 0;
-   }
-   
+       if (!(result = (XIDLookupEnt *)
+                 hash_search(xidTable, (Pointer) &item, HASH_FIND, &found)) || !found)
+       {
+           elog(NOTICE, "LockAcquire: xid table corrupted");
+           return true;
+       }
+       MyNHolding = result->nHolding;
+   }   
    if (SHMQueueEmpty(lockQueue))
        return false;
 
@@ -1533,12 +1534,14 @@ DeadLockCheck(SHM_QUEUE *lockQueue, LOCK *findlock, bool skip_check)
                    item.tag.pid = pid;
 #endif
                
-                   if ((result = (XIDLookupEnt *)
-                         hash_search(xidTable, (Pointer) &item, HASH_FIND, &found)) && found)
+                   if (!(result = (XIDLookupEnt *)
+                             hash_search(xidTable, (Pointer) &item, HASH_FIND, &found)) || !found)
                    {
-                       if (result->nHolding)
-                               return true;
+                       elog(NOTICE, "LockAcquire: xid table corrupted");
+                       return true;
                    }
+                   if (result->nHolding)
+                       return true;
                }
                /*
                 *  No sense in looking at the wait queue of the lock we are