From 02255c5fbc7e6dc0206db978994617cc72de4bb8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 29 Aug 2017 21:53:49 +0300 Subject: [PATCH] Avoid spinning waiting for git-gui.exe on Windows * src/w32proc.c (waitpid): If GetExitCodeProcess returns STILL_ACTIVE, and we were called with WNOHANG, pretend that the process exited. (Bug#28268) --- src/w32proc.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/w32proc.c b/src/w32proc.c index ffd5f0d0a1a..71bd28d3c24 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -1492,12 +1492,17 @@ waitpid (pid_t pid, int *status, int options) } if (retval == STILL_ACTIVE) { - /* Should never happen. */ + /* Should never happen. But it does, with invoking git-gui.exe + asynchronously. So we punt, and just report this process as + exited with exit code 259, when we are called with WNOHANG + from child_status_changed, because in that case we already + _know_ the process has died. */ DebPrint (("Wait.WaitForMultipleObjects returned an active process\n")); - if (pid > 0 && dont_wait) - return 0; - errno = EINVAL; - return -1; + if (!(pid > 0 && dont_wait)) + { + errno = EINVAL; + return -1; + } } /* Massage the exit code from the process to match the format expected -- 2.39.2