From d09088128678f4019e4f5c676bca6880acafaba2 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 27 Aug 2008 13:18:04 +0000 Subject: [PATCH] DEVEL15-windows-lock-order-20080827 LICENSE MIT do not hold cm_scacheLock while obtaining cm_scache_t->rw (cherry picked from commit c50857b05e6636bef864c9418b21d1bf3c63494a) --- src/WINNT/afsd/cm_scache.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 -- 2.39.5