Commit 0c7f84ca authored by Brad King's avatar Brad King
Browse files

KWSys Process: Workaround child kill trouble on Cygwin

When we kill a child we send SIGSTOP first so that we can traverse its
child processes recursively.  On unwinding the recursion we then send
SIGKILL.  Current Cygwin has trouble when both signals are sent in quick
succession by the parent process.  Add a usleep(1) after sending the
first signal to give up our time slice and give Cygwin a chance to
process the first signal before sending the second.
parent e604209c
...@@ -2413,6 +2413,12 @@ static void kwsysProcessKill(pid_t process_id) ...@@ -2413,6 +2413,12 @@ static void kwsysProcessKill(pid_t process_id)
/* Suspend the process to be sure it will not create more children. */ /* Suspend the process to be sure it will not create more children. */
kill(process_id, SIGSTOP); kill(process_id, SIGSTOP);
#if defined(__CYGWIN__)
/* Some Cygwin versions seem to need help here. Give up our time slice
so that the child can process SIGSTOP before we send SIGKILL. */
usleep(1);
#endif
/* Kill all children if we can find them. */ /* Kill all children if we can find them. */
#if defined(__linux__) || defined(__CYGWIN__) #if defined(__linux__) || defined(__CYGWIN__)
/* First try using the /proc filesystem. */ /* First try using the /proc filesystem. */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment