Don't get stuck in SERVICE_CONTINUE_PENDING.
authorIain Patterson <me@iain.cx>
Mon, 13 Jan 2014 12:08:17 +0000 (12:08 +0000)
committerIain Patterson <me@iain.cx>
Mon, 13 Jan 2014 12:08:17 +0000 (12:08 +0000)
If we received SERVICE_CONTROL_CONTINUE and the service wasn't paused we
would incorrectly set SERVICE_CONTINUE_PENDING status.

The Windows services console won't allow a user to attempt to send a
continue control to a running service but other applications, like say
NSSM itself, might happily try, then get confused when the status wasn't
set to SERVICE_RUNNING.

service.cpp

index fbbab20..aee0a67 100644 (file)
@@ -1456,7 +1456,8 @@ unsigned long WINAPI service_control_handler(unsigned long control, unsigned lon
         ZeroMemory(&service->throttle_duetime, sizeof(service->throttle_duetime));\r
         SetWaitableTimer(service->throttle_timer, &service->throttle_duetime, 0, 0, 0, 0);\r
       }\r
-      service->status.dwCurrentState = SERVICE_CONTINUE_PENDING;\r
+      /* We can't continue if the application is running! */\r
+      if (! service->process_handle) service->status.dwCurrentState = SERVICE_CONTINUE_PENDING;\r
       service->status.dwWaitHint = throttle_milliseconds(service->throttle) + NSSM_WAITHINT_MARGIN;\r
       log_event(EVENTLOG_INFORMATION_TYPE, NSSM_EVENT_RESET_THROTTLE, service->name, 0);\r
       SetServiceStatus(service->status_handle, &service->status);\r