]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: cm_ConnByServer hold userp->mx only while necessary
authorJeffrey Altman <jaltman@your-file-system.com>
Thu, 5 Jul 2012 18:54:04 +0000 (14:54 -0400)
committerJeffrey Altman <jaltman@your-file-system.com>
Sat, 8 Dec 2012 16:17:11 +0000 (08:17 -0800)
The cm_userp_t does not need to be locked while the cm_conn_t
force new connection processing is taking place.

Reviewed-on: http://gerrit.openafs.org/7718
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Tested-by: Jeffrey Altman <jaltman@your-file-system.com>
(cherry picked from commit 5b9e9265a0df707e9fb79842ab5aa94b59b8e88e)

Change-Id: I0fb0f5b7ede676b4513e33fa664e66cafed18e01
Reviewed-on: http://gerrit.openafs.org/8640
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
src/WINNT/afsd/cm_conn.c

index 0d4886260f616479f5cf84ad5246b1d931ec87fe..a80b3c4e43285b740aa2406786955a45ae67f8f5 100644 (file)
@@ -1513,9 +1513,11 @@ long cm_ConnByServer(cm_server_t *serverp, cm_user_t *userp, afs_uint32 replicat
         tcp->nextp = serverp->connsp;
         serverp->connsp = tcp;
         lock_ReleaseWrite(&cm_connLock);
+        lock_ReleaseMutex(&userp->mx);
     } else {
         lock_ReleaseRead(&cm_connLock);
       haveconn:
+        lock_ReleaseMutex(&userp->mx);
         InterlockedIncrement(&tcp->refCount);
 
         lock_ObtainMutex(&tcp->mx);
@@ -1527,14 +1529,13 @@ long cm_ConnByServer(cm_server_t *serverp, cm_user_t *userp, afs_uint32 replicat
                 osi_Log0(afsd_logp, "cm_ConnByServer replace connection due to token update");
             else
                 osi_Log0(afsd_logp, "cm_ConnByServer replace connection due to crypt change");
-           tcp->flags &= ~CM_CONN_FLAG_FORCE_NEW;
+            tcp->flags &= ~CM_CONN_FLAG_FORCE_NEW;
             rx_SetConnSecondsUntilNatPing(tcp->rxconnp, 0);
             rx_DestroyConnection(tcp->rxconnp);
             cm_NewRXConnection(tcp, ucellp, serverp, replicated);
         }
         lock_ReleaseMutex(&tcp->mx);
     }
-    lock_ReleaseMutex(&userp->mx);
 
     /* return this pointer to our caller */
     osi_Log1(afsd_logp, "cm_ConnByServer returning conn 0x%p", tcp);