X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=process.cpp;h=22e5a121634ebd95722e4e0b9299635992807359;hb=2a259b54caa08ef6d4dbc99f6fe7ec97837c25e8;hp=d1a9a4982395117e1caf6f1875b52dfa4a9d7733;hpb=b6f7fe3b11fd130f46eb6b5009391cc3bb0cad49;p=nssm.git diff --git a/process.cpp b/process.cpp index d1a9a49..22e5a12 100644 --- a/process.cpp +++ b/process.cpp @@ -115,7 +115,7 @@ int kill_threads(nssm_service_t *service, kill_t *k) { /* Get a snapshot of all threads in the system. */ HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); - if (! snapshot) { + if (snapshot == INVALID_HANDLE_VALUE) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_CREATETOOLHELP32SNAPSHOT_THREAD_FAILED, k->name, error_string(GetLastError()), 0); return 0; } @@ -241,7 +241,8 @@ int kill_console(nssm_service_t *service, kill_t *k) { /* Ignore the event ourselves. */ ret = 0; - if (! SetConsoleCtrlHandler(0, TRUE)) { + BOOL ignored = SetConsoleCtrlHandler(0, TRUE); + if (! ignored) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_SETCONSOLECTRLHANDLER_FAILED, k->name, error_string(GetLastError()), 0); ret = 4; } @@ -262,6 +263,11 @@ int kill_console(nssm_service_t *service, kill_t *k) { /* Wait for process to exit. */ if (await_single_handle(k->status_handle, k->status, k->process_handle, k->name, _T(__FUNCTION__), k->kill_console_delay)) ret = 6; + /* Remove our handler. */ + if (ignored && ! SetConsoleCtrlHandler(0, FALSE)) { + log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_SETCONSOLECTRLHANDLER_FAILED, k->name, error_string(GetLastError()), 0); + } + return ret; } @@ -303,7 +309,7 @@ void kill_process_tree(nssm_service_t * service, kill_t *k, unsigned long ppid) /* Get a snapshot of all processes in the system. */ HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - if (! snapshot) { + if (snapshot == INVALID_HANDLE_VALUE) { log_event(EVENTLOG_ERROR_TYPE, NSSM_EVENT_CREATETOOLHELP32SNAPSHOT_PROCESS_FAILED, k->name, error_string(GetLastError()), 0); return; }