[WINSRV] Wait for the process to exit after calling NtTerminateProcess
authorGiannis Adamopoulos <gadamopoulos@reactos.org>
Sun, 25 Nov 2018 18:13:56 +0000 (20:13 +0200)
committerGiannis Adamopoulos <gadamopoulos@reactos.org>
Tue, 27 Nov 2018 08:28:31 +0000 (10:28 +0200)
NtTerminateProcess just queues an apc in every thread of the target process which in turn kills each thread. We need to wait so that all processes have enough time to exit before shutting down.

win32ss/user/winsrv/usersrv/shutdown.c

index 5c2f464..7238b21 100644 (file)
@@ -796,6 +796,8 @@ UserClientShutdown(IN PCSR_PROCESS CsrProcess,
 #endif
     NtTerminateProcess(CsrProcess->ProcessHandle, 0);
 
+    WaitForSingleObject(CsrProcess->ProcessHandle, ShutdownSettings.ProcessTerminateTimeout);
+
     /* We are done */
     CsrDereferenceProcess(CsrProcess);
     return CsrShutdownCsrProcess;