From: Jeffrey Altman Date: Thu, 5 Jul 2012 18:54:04 +0000 (-0400) Subject: Windows: cm_ConnByServer hold userp->mx only while necessary X-Git-Tag: upstream/1.6.2_pre2^2~36 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=1cc48eeda92a516d2c30b1d68ede6112500a217e;p=packages%2Fo%2Fopenafs.git Windows: cm_ConnByServer hold userp->mx only while necessary 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 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman (cherry picked from commit 5b9e9265a0df707e9fb79842ab5aa94b59b8e88e) Change-Id: I0fb0f5b7ede676b4513e33fa664e66cafed18e01 Reviewed-on: http://gerrit.openafs.org/8640 Tested-by: BuildBot Reviewed-by: Jeffrey Altman --- diff --git a/src/WINNT/afsd/cm_conn.c b/src/WINNT/afsd/cm_conn.c index 0d4886260..a80b3c4e4 100644 --- a/src/WINNT/afsd/cm_conn.c +++ b/src/WINNT/afsd/cm_conn.c @@ -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);