From 399d345a1cc4bac1951dc2f2169a59ce07130d1b Mon Sep 17 00:00:00 2001 From: Manoj Ampalam Date: Mon, 4 Apr 2016 14:55:29 -0700 Subject: [PATCH] Fixed double Close on process handle --- contrib/win32/win32compat/signal.c | 21 --------------------- contrib/win32/win32compat/signal_sigchld.c | 22 +++++++++++++++++++++- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/contrib/win32/win32compat/signal.c b/contrib/win32/win32compat/signal.c index f9a2ec6..9263baa 100644 --- a/contrib/win32/win32compat/signal.c +++ b/contrib/win32/win32compat/signal.c @@ -156,27 +156,6 @@ sw_raise(int sig) { return 0; } -int -sw_kill(int pid, int sig) { - int child_index, i; - if (pid == GetCurrentProcessId()) - return sw_raise(sig); - - /* for child processes - only SIGTERM supported*/ - /* TODO implement kill(SIGTERM) for child processes */ - child_index = -1; - for (i = 0; i < children.num_children; i++) - if (children.process_id[i] == pid) { - child_index = i; - break; - } - - if (child_index != -1) - TerminateProcess(children.handles[child_index], 0); - return 0; -} - - /* processes pending signals, return EINTR if any are processed*/ static int sw_process_pending_signals() { diff --git a/contrib/win32/win32compat/signal_sigchld.c b/contrib/win32/win32compat/signal_sigchld.c index ddc5473..f1401b9 100644 --- a/contrib/win32/win32compat/signal_sigchld.c +++ b/contrib/win32/win32compat/signal_sigchld.c @@ -127,6 +127,26 @@ sw_child_to_zombie(DWORD index) { return 0; } +int +sw_kill(int pid, int sig) { + int child_index, i; + if (pid == GetCurrentProcessId()) + return sw_raise(sig); + + /* for child processes - only SIGTERM supported*/ + child_index = -1; + for (i = 0; i < children.num_children; i++) + if (children.process_id[i] == pid) { + child_index = i; + break; + } + + if (child_index != -1) + TerminateProcess(children.handles[child_index], 0); + return 0; +} + + int waitpid(int pid, int *status, int options) { DWORD index, ret, ret_id, exit_code, timeout = 0; HANDLE process = NULL; @@ -189,7 +209,7 @@ int waitpid(int pid, int *status, int options) { process = children.handles[index]; ret_id = children.process_id[index]; GetExitCodeProcess(process, &exit_code); - CloseHandle(process); + /* process handle will be closed when its removed from list */ sw_remove_child_at_index(index); if (status) *status = exit_code;