Ensure we have a valid service exit time.
[nssm.git] / process.cpp
index 59707c4..c0b65df 100644 (file)
@@ -23,6 +23,7 @@ int get_process_exit_time(HANDLE process_handle, FILETIME *ft) {
     return 1;
   }
 
+  if (! (exit_time.dwLowDateTime || exit_time.dwHighDateTime)) return 2;
   memmove(ft, &exit_time, sizeof(exit_time));
 
   return 0;
@@ -149,16 +150,9 @@ int kill_process(nssm_service_t *service, HANDLE process_handle, unsigned long p
 
   kill_t k = { pid, exitcode, 0 };
 
-  /* Close the stdin pipe. */
-  if (service->stdin_pipe) {
-    CloseHandle(service->stdin_pipe);
-    service->stdin_pipe = 0;
-    if (! await_shutdown(service, _T(__FUNCTION__), service->kill_console_delay)) return 1;
-  }
-
   /* Try to send a Control-C event to the console. */
   if (service->stop_method & NSSM_STOP_METHOD_CONSOLE) {
-    if (! kill_console(service)) return 1;
+    if (! kill_console(service, &k)) return 1;
   }
 
   /*
@@ -193,7 +187,7 @@ int kill_process(nssm_service_t *service, HANDLE process_handle, unsigned long p
 }
 
 /* Simulate a Control-C event to our console (shared with the app). */
-int kill_console(nssm_service_t *service) {
+int kill_console(nssm_service_t *service, kill_t *k) {
   unsigned long ret;
 
   if (! service) return 1;
@@ -202,7 +196,7 @@ int kill_console(nssm_service_t *service) {
   if (! imports.AttachConsole) return 4;
 
   /* Try to attach to the process's console. */
-  if (! imports.AttachConsole(service->pid)) {
+  if (! imports.AttachConsole(k->pid)) {
     ret = GetLastError();
 
     switch (ret) {