-\r
-int await_startup(nssm_service_t *service) {\r
- unsigned long interval;\r
- unsigned long waithint;\r
- unsigned long waited;\r
-\r
- waithint = service->status.dwWaitHint;\r
- waited = 0;\r
- while (waited < service->throttle_delay) {\r
- interval = service->throttle_delay - waited;\r
- if (interval > NSSM_SERVICE_STATUS_DEADLINE) interval = NSSM_SERVICE_STATUS_DEADLINE;\r
-\r
- service->status.dwCurrentState = SERVICE_START_PENDING;\r
- service->status.dwWaitHint += interval;\r
- service->status.dwCheckPoint++;\r
- SetServiceStatus(service->status_handle, &service->status);\r
-\r
- switch (WaitForSingleObject(service->process_handle, interval)) {\r
- case WAIT_OBJECT_0:\r
- return 1;\r
-\r
- case WAIT_TIMEOUT:\r
- break;\r
-\r
- default:\r
- return -1;\r
- }\r
-\r
- waited += interval;\r
- }\r
-\r
- service->throttle = 0;\r
-\r
- return 0;\r
-}\r