From ce8d0aefd1a6915df281ec2551b3f090c2a3b322 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 25 May 2012 21:47:23 -0400 Subject: [PATCH] Windows: Avoid deadlock on ProcessTree Lock Change-Id: I2c1be0df615c513eefc27be167d7acda113c06e2 Reviewed-on: http://gerrit.openafs.org/7505 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- .../afsrdr/kernel/fs/AFSProcessSupport.cpp | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/WINNT/afsrdr/kernel/fs/AFSProcessSupport.cpp b/src/WINNT/afsrdr/kernel/fs/AFSProcessSupport.cpp index 1f77caf70..af87c80cd 100644 --- a/src/WINNT/afsrdr/kernel/fs/AFSProcessSupport.cpp +++ b/src/WINNT/afsrdr/kernel/fs/AFSProcessSupport.cpp @@ -290,25 +290,41 @@ AFSValidateProcessEntry( IN HANDLE ProcessId) pProcessCB == NULL) { - AFSProcessCreate( 0, - ProcessId, - 0, - 0); - } + AFSReleaseResource( pDeviceExt->Specific.Control.ProcessTree.TreeLock); - if( !NT_SUCCESS( ntStatus) || - pProcessCB == NULL) - { + AFSAcquireExcl( pDeviceExt->Specific.Control.ProcessTree.TreeLock, + TRUE); - AFSDbgLogMsg( AFS_SUBSYSTEM_AUTHGROUP_PROCESSING, - AFS_TRACE_LEVEL_ERROR, - "%s Failed to locate process entry for ProcessID %I64X\n", - __FUNCTION__, - ullProcessID); + ntStatus = AFSLocateHashEntry( pDeviceExt->Specific.Control.ProcessTree.TreeHead, + ullProcessID, + (AFSBTreeEntry **)&pProcessCB); - AFSReleaseResource( pDeviceExt->Specific.Control.ProcessTree.TreeLock); + if( !NT_SUCCESS( ntStatus) || + pProcessCB == NULL) + { + + AFSProcessCreate( 0, + ProcessId, + 0, + 0); + } + + if( !NT_SUCCESS( ntStatus) || + pProcessCB == NULL) + { + + AFSDbgLogMsg( AFS_SUBSYSTEM_AUTHGROUP_PROCESSING, + AFS_TRACE_LEVEL_ERROR, + "%s Failed to locate process entry for ProcessID %I64X\n", + __FUNCTION__, + ullProcessID); + + AFSReleaseResource( pDeviceExt->Specific.Control.ProcessTree.TreeLock); + + try_return( ntStatus = STATUS_UNSUCCESSFUL); + } - try_return( ntStatus = STATUS_UNSUCCESSFUL); + AFSConvertToShared( pDeviceExt->Specific.Control.ProcessTree.TreeLock); } // -- 2.39.5