From: Jeffrey Altman Date: Sat, 13 Apr 2013 05:57:56 +0000 (-0400) Subject: Windows: AFSExamineVolume drop TreeLock if waiters X-Git-Tag: upstream/1.8.0_pre1^2~1201 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=5952cc139c102035591e8c95bbba313cf709d332;p=packages%2Fo%2Fopenafs.git Windows: AFSExamineVolume drop TreeLock if waiters After each call to AFSExamineObject drop the ObjectInfoTree.TreeLock if there are threads waiting for access. The garbage collection process should not delay real work. Change-Id: I2bd009d71b534d92d7e1b321b6db2204643e4666 Reviewed-on: http://gerrit.openafs.org/9786 Reviewed-by: Rod Widdowson Tested-by: BuildBot Reviewed-by: Jeffrey Altman --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp b/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp index 32b2bd916..228cbc671 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp @@ -1636,6 +1636,15 @@ AFSExamineVolume( IN AFSVolumeCB *pVolumeCB) AFSExamineObjectInfo( pCurrentObject, bVolumeObject, &bReleaseVolumeTreeLock); + if ( bReleaseVolumeTreeLock == TRUE && + ( ExGetExclusiveWaiterCount( pVolumeCB->ObjectInfoTree.TreeLock) > 0 || + ExGetSharedWaiterCount( pVolumeCB->ObjectInfoTree.TreeLock) > 0)) + { + + AFSReleaseResource( pVolumeCB->ObjectInfoTree.TreeLock); + + bReleaseVolumeTreeLock = FALSE; + } // // The CurrentObject is either destroyed or the reference count has been // dropped by AFSExamineObjectInfo().