From: Jeffrey Altman Date: Fri, 12 Apr 2013 15:12:13 +0000 (-0400) Subject: Windows: AFSInvalidateVolume ObjectInfo refcnt decrement X-Git-Tag: upstream/1.8.0_pre1^2~1205 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=ed76e573ae5db4fb83d57217562c4998ffa845cb;p=packages%2Fo%2Fopenafs.git Windows: AFSInvalidateVolume ObjectInfo refcnt decrement In AFSInvalidateVolume a reference count is obtained in order to ensure that the object is valid throughout the invalidation request. Although the refcnt is obtained while holding the TreeLock the refcnt was not released while holding the TreeLock which could open the door for another thread to race. Change-Id: I5c7ee91b78a2ce5f03cdc5f835b15357ecbec443 Reviewed-on: http://gerrit.openafs.org/9782 Reviewed-by: Rod Widdowson Tested-by: BuildBot Reviewed-by: Jeffrey Altman --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp index 3acfa8e87..2c4dc075a 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp @@ -2759,6 +2759,9 @@ AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB, AFSInvalidateObject( &pCurrentObject, Reason); + AFSAcquireShared( VolumeCB->ObjectInfoTree.TreeLock, + TRUE); + if ( pCurrentObject ) { @@ -2772,9 +2775,6 @@ AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB, lCount)); } - AFSAcquireShared( VolumeCB->ObjectInfoTree.TreeLock, - TRUE); - pCurrentObject = pNextObject; }