Browse Source

Don't get stuck in SERVICE_CONTINUE_PENDING.

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.
Iain Patterson 8 years ago
parent
commit
e00dcf2fb5
1 changed files with 2 additions and 1 deletions
  1. 2 1
      service.cpp

+ 2 - 1
service.cpp

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