Windows: RDRLib Worker Thread shutdown
authorJeffrey Altman <jaltman@your-file-system.com>
Mon, 28 Oct 2013 05:06:47 +0000 (01:06 -0400)
committerJeffrey Altman <jaltman@your-file-system.com>
Thu, 31 Oct 2013 11:55:10 +0000 (04:55 -0700)
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 <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>

src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp

index f42860c..ed912c3 100644 (file)
@@ -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;