Avoid busy-waiting for child processes on Windows. (Bug#13086)
src/w32proc.c (waitpid): Avoid busy-waiting when called with WNOHANG if the child process is still running. Instead, exit the wait loop and return zero.
This commit is contained in:
parent
5b4d7e523f
commit
e86f51344b
2 changed files with 16 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2012-12-06 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* w32proc.c (waitpid): Avoid busy-waiting when called with WNOHANG
|
||||
if the child process is still running. Instead, exit the wait
|
||||
loop and return zero. (Bug#13086)
|
||||
|
||||
2012-12-06 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* frame.h (x_char_width, x_char_height): Remove prototypes.
|
||||
|
|
|
@ -1220,13 +1220,22 @@ waitpid (pid_t pid, int *status, int options)
|
|||
{
|
||||
QUIT;
|
||||
active = WaitForMultipleObjects (nh, wait_hnd, FALSE, timeout_ms);
|
||||
} while (active == WAIT_TIMEOUT);
|
||||
} while (active == WAIT_TIMEOUT && !dont_wait);
|
||||
|
||||
if (active == WAIT_FAILED)
|
||||
{
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
else if (active == WAIT_TIMEOUT && dont_wait)
|
||||
{
|
||||
/* PID specifies our subprocess, but it didn't exit yet, so its
|
||||
status is not yet available. */
|
||||
#ifdef FULL_DEBUG
|
||||
DebPrint (("Wait: PID %d not reap yet\n", cp->pid));
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
else if (active >= WAIT_OBJECT_0
|
||||
&& active < WAIT_OBJECT_0+MAXIMUM_WAIT_OBJECTS)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue