From: Peter Scott Date: Fri, 4 Nov 2011 13:31:57 +0000 (-0600) Subject: Windows: Failed to release correct lock X-Git-Tag: upstream/1.8.0_pre1^2~3086 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=f7adbd3d3977a328612c0f527d764566846593da;p=packages%2Fo%2Fopenafs.git Windows: Failed to release correct lock For cross-directory renames, the correct parent lock was not being tracked Change-Id: Ib50aad63f56cde638ff3bf1595d4495338c15f91 Reviewed-on: http://gerrit.openafs.org/5805 Tested-by: BuildBot Tested-by: Jeffrey Altman Reviewed-by: Jeffrey Altman --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp b/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp index 390ad80c0..cdd850f59 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp @@ -1917,6 +1917,7 @@ AFSSetRenameInfo( IN PIRP Irp) BOOLEAN bReleaseVolumeLock = FALSE; BOOLEAN bReleaseTargetDirLock = FALSE; BOOLEAN bReleaseSourceDirLock = FALSE; + PERESOURCE pSourceDirLock = NULL; __Enter { @@ -2036,10 +2037,6 @@ AFSSetRenameInfo( IN PIRP Irp) try_return( ntStatus = STATUS_NOT_SAME_DEVICE); } - // - // If the target exists be sure the ReplaceIfExists flag is set - // - AFSAcquireExcl( pTargetParentObject->VolumeCB->VolumeLock, TRUE); @@ -2059,6 +2056,8 @@ AFSSetRenameInfo( IN PIRP Irp) TRUE); bReleaseSourceDirLock = TRUE; + + pSourceDirLock = pSrcFcb->ObjectInformation->ParentObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock; } AFSLocateCaseSensitiveDirEntry( pTargetParentObject->Specific.Directory.DirectoryNodeHdr.CaseSensitiveTreeHead, @@ -2517,7 +2516,7 @@ try_exit: if( bReleaseSourceDirLock) { - AFSReleaseResource( pSrcFcb->ObjectInformation->ParentObjectInformation->Specific.Directory.DirectoryNodeHdr.TreeLock); + AFSReleaseResource( pSourceDirLock); } }