+/* Allocate and zero memory for a service. */\r
+nssm_service_t *alloc_nssm_service() {\r
+ nssm_service_t *service = (nssm_service_t *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(nssm_service_t));\r
+ if (! service) log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_OUT_OF_MEMORY, "service", "alloc_nssm_service()", 0);\r
+ return service;\r
+}\r
+\r
+/* Free memory for a service. */\r
+void cleanup_nssm_service(nssm_service_t *service) {\r
+ if (! service) return;\r
+ if (service->env) HeapFree(GetProcessHeap(), 0, service->env);\r
+ if (service->handle) CloseServiceHandle(service->handle);\r
+ if (service->process_handle) CloseHandle(service->process_handle);\r
+ if (service->wait_handle) UnregisterWait(service->process_handle);\r
+ if (service->throttle_section_initialised) DeleteCriticalSection(&service->throttle_section);\r
+ if (service->throttle_timer) CloseHandle(service->throttle_timer);\r
+ HeapFree(GetProcessHeap(), 0, service);\r
+}\r
+\r