From: Eli Zaretskii Date: Tue, 29 Aug 2017 18:53:49 +0000 (+0300) Subject: Avoid spinning waiting for git-gui.exe on Windows X-Git-Tag: emacs-26.0.90~311 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=02255c5fbc7e6dc0206db978994617cc72de4bb8;p=emacs.git 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) --- 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