|
@@ -1472,6 +1472,8 @@ nt_service_is_stopped(void)
|
|
|
service_status.dwCurrentState = SERVICE_STOPPED;
|
|
|
SetServiceStatus(hStatus, &service_status);
|
|
|
return 1;
|
|
|
+ } else if (service_status.dwCurrentState == SERVICE_STOPPED) {
|
|
|
+ return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -1480,11 +1482,16 @@ nt_service_is_stopped(void)
|
|
|
void
|
|
|
nt_service_control(DWORD request)
|
|
|
{
|
|
|
+ static struct timeval exit_now;
|
|
|
+ exit_now.tv_sec = 0;
|
|
|
+ exit_now.tv_usec = 0;
|
|
|
+
|
|
|
switch (request) {
|
|
|
case SERVICE_CONTROL_STOP:
|
|
|
case SERVICE_CONTROL_SHUTDOWN:
|
|
|
log(LOG_ERR, "Got stop/shutdown request; shutting down cleanly.");
|
|
|
service_status.dwCurrentState = SERVICE_STOP_PENDING;
|
|
|
+ event_loopexit(&exit_now);
|
|
|
return;
|
|
|
}
|
|
|
SetServiceStatus(hStatus, &service_status);
|