OSDN Git Service

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

index e218a40..7a444a1 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