From: Jeffrey Altman Date: Mon, 28 Oct 2013 05:06:47 +0000 (-0400) Subject: Windows: RDRLib Worker Thread shutdown X-Git-Tag: upstream/1.8.0_pre1^2~952 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=064558a69281398d1dc6873453449eee9b3a8d8d;p=packages%2Fo%2Fopenafs.git Windows: RDRLib Worker Thread shutdown The thread waiting to unload the library is polling the state of the AFS_WORKER_INITIALIZED flag in the PoolContext->State field for each worker. Ensure that the thread performs no actions other than PsTerminateSystemThread() after clearing the AFS_WORKER_INITIALIZED flag. Change-Id: I0baa92f05a5d5f00219a2cc63ca71c7a6a1f52b5 Reviewed-on: http://gerrit.openafs.org/10383 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 f42860cf9..ed912c394 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp @@ -790,14 +790,14 @@ AFSWorkerThread( IN PVOID Context) } } // worker thread loop - ClearFlag( pPoolContext->State, AFS_WORKER_INITIALIZED); - // Wake up another worker so they too can exit KeSetEvent( &pControlDevExt->Specific.Control.WorkerQueueHasItems, 0, FALSE); + ClearFlag( pPoolContext->State, AFS_WORKER_INITIALIZED); + PsTerminateSystemThread( 0); return; @@ -940,14 +940,14 @@ AFSIOWorkerThread( IN PVOID Context) } } // worker thread loop - ClearFlag( pPoolContext->State, AFS_WORKER_INITIALIZED); - // Wake up another IOWorker so they too can exit KeSetEvent( &pControlDevExt->Specific.Control.IOWorkerQueueHasItems, 0, FALSE); + ClearFlag( pPoolContext->State, AFS_WORKER_INITIALIZED); + PsTerminateSystemThread( 0); return;