From: Jeffrey Altman Date: Wed, 27 Aug 2008 13:18:04 +0000 (+0000) Subject: DEVEL15-windows-lock-order-20080827 X-Git-Tag: openafs-devel-1_5_53~72 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=d09088128678f4019e4f5c676bca6880acafaba2;p=packages%2Fo%2Fopenafs.git DEVEL15-windows-lock-order-20080827 LICENSE MIT do not hold cm_scacheLock while obtaining cm_scache_t->rw (cherry picked from commit c50857b05e6636bef864c9418b21d1bf3c63494a) --- diff --git a/src/WINNT/afsd/cm_scache.c b/src/WINNT/afsd/cm_scache.c index 486d0c211..d7909892e 100644 --- a/src/WINNT/afsd/cm_scache.c +++ b/src/WINNT/afsd/cm_scache.c @@ -747,9 +747,11 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, lock_ReleaseWrite(&cm_scacheLock); return CM_ERROR_WOULDBLOCK; } - } else + } else { + lock_ReleaseWrite(&cm_scacheLock); lock_ObtainWrite(&scp->rw); - + lock_ObtainWrite(&cm_scacheLock); + } scp->fid = *fidp; scp->dotdotFid.cell=AFS_FAKE_ROOT_CELL_ID; scp->dotdotFid.volume=AFS_FAKE_ROOT_VOL_ID; @@ -778,12 +780,12 @@ long cm_GetSCache(cm_fid_t *fidp, cm_scache_t **outScpp, cm_user_t *userp, scp->bufDataVersionLow=cm_data.fakeDirVersion; scp->lockDataVersion=-1; /* no lock yet */ lock_ReleaseWrite(&scp->rw); + lock_ReleaseWrite(&cm_scacheLock); *outScpp = scp; #ifdef DEBUG_REFCOUNT afsi_log("%s:%d cm_GetSCache (2) scp 0x%p ref %d", file, line, scp, scp->refCount); osi_Log1(afsd_logp,"cm_GetSCache (2) scp 0x%p", scp); #endif - lock_ReleaseWrite(&cm_scacheLock); return 0; } // end of yj code