From: Jeffrey Altman Date: Mon, 23 Jul 2012 05:38:03 +0000 (-0400) Subject: Windows: cm_UpdateVolumeLocation volp locked X-Git-Tag: upstream/1.8.0_pre1^2~2178 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=748a3e29b624d10e90af43cb0dc65a4f96c0310e;p=packages%2Fo%2Fopenafs.git Windows: cm_UpdateVolumeLocation volp locked When calling cm_UpdateVolumeLocation the volp->mx must be held. cm_Analyze() did not obtain the mutex as required. Change-Id: Ida69105879a78692a367cd4439bee8e4bea751ff Reviewed-on: http://gerrit.openafs.org/7839 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/WINNT/afsd/cm_conn.c b/src/WINNT/afsd/cm_conn.c index 21044e454..7ba19bbdb 100644 --- a/src/WINNT/afsd/cm_conn.c +++ b/src/WINNT/afsd/cm_conn.c @@ -420,15 +420,18 @@ cm_Analyze(cm_conn_t *connp, CM_GETVOL_FLAG_NO_LRU_UPDATE, &volp); if (code == 0) { + lock_ObtainWrite(&volp->rw); if (cm_UpdateVolumeLocation(cellp, userp, reqp, volp) == 0) { + lock_ReleaseWrite(&volp->rw); code = cm_GetVolServerList(volp, fidp->volume, userp, reqp, &replicated, &serverspp); if (code == 0) { if (!cm_IsServerListEmpty(*serverspp)) retry = 1; cm_FreeServerList(serverspp, 0); } + } else { + lock_ReleaseWrite(&volp->rw); } - lock_ObtainRead(&cm_volumeLock); cm_PutVolume(volp); lock_ReleaseRead(&cm_volumeLock);