windows-aclent-deadlock-20050713
authorJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 13 Jul 2005 15:22:06 +0000 (15:22 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 13 Jul 2005 15:22:06 +0000 (15:22 +0000)
Discovered a deadlock due to a violation of lock order.  We may not
attempt to obtain a lock on a cm_scache_t mutex while holding the
cm_aclLock.

doc/txt/winnotes/afs-changes-since-1.2.txt
src/WINNT/afsd/cm_aclent.c

index 85c6398..e867d03 100644 (file)
@@ -1,3 +1,8 @@
+Since 1.3.85:
+ * Fixed a deadlock caused by the holder of cm_aclLock attempting to 
+   obtain a mutex lock on a cm_scache_t object whose lock is held by
+   a thread attempting to obtain the cm_aclLock.
+
 Since 1.3.84:
  * Added a new registry key, "LogoffPreserveTokens" (see registry.txt),
    that can be used to force the preservation of user tokens upon logout.
index 52e635e..42a0c0a 100644 (file)
@@ -127,7 +127,9 @@ static cm_aclent_t *GetFreeACLEnt(cm_scache_t * scp)
 
     if (aclp->backp && scp != aclp->backp) {
         ascp = aclp->backp;
+        lock_ReleaseWrite(&cm_aclLock);
         lock_ObtainMutex(&ascp->mx);
+        lock_ObtainWrite(&cm_aclLock);
     }
     CleanupACLEnt(aclp);