summaryrefslogtreecommitdiff
path: root/src/sysdep.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2012-11-17 18:46:45 +0200
committerEli Zaretskii <eliz@gnu.org>2012-11-17 18:46:45 +0200
commit22bae83fa8c432780fe20202a660aa8c84f3087a (patch)
treee58043c1a42681cc2ba63a20c5d85c84a1dbb6ad /src/sysdep.c
parenta631d0e04747884855aa460cb903d1fd2ff106f4 (diff)
downloademacs-22bae83fa8c432780fe20202a660aa8c84f3087a.tar.gz
emacs-22bae83fa8c432780fe20202a660aa8c84f3087a.tar.bz2
emacs-22bae83fa8c432780fe20202a660aa8c84f3087a.zip
Fix bug #12829 with aborts on MS-Windows when several child processes die.
nt/inc/sys/wait.h: New file, with prototype of waitpid and definitions of macros it needs. nt/inc/ms-w32.h (wait): Don't define, 'wait' is not used anymore. (sys_wait): Remove prototype. nt/config.nt (HAVE_SYS_WAIT_H): Define to 1. src/w32proc.c (create_child): Don't clip the PID of the child process to fit into an Emacs integer, as this is no longer a restriction. (waitpid): Rename from sys_wait. Emulate a Posix 'waitpid' by reaping only the process specified by PID argument, if that is positive. Use PID instead of dead_child to know which process to reap. Wait for the child to die only if WNOHANG is not in OPTIONS. (sys_select): Don't set dead_child. src/sysdep.c (wait_for_termination_1): Remove the WINDOWSNT portion, as it is no longer needed. src/process.c (waitpid, WUNTRACED) [!WNOHANG]: Remove definitions, no longer needed. (record_child_status_change): Remove the setting of record_at_most_one_child for the !WNOHANG case.
Diffstat (limited to 'src/sysdep.c')
-rw-r--r--src/sysdep.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/src/sysdep.c b/src/sysdep.c
index a7f3de2f1b1..06dc41b511e 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -289,10 +289,6 @@ wait_for_termination_1 (pid_t pid, int interruptible)
{
while (1)
{
-#ifdef WINDOWSNT
- wait (0);
- break;
-#else /* not WINDOWSNT */
int status;
int wait_result = waitpid (pid, &status, 0);
if (wait_result < 0)
@@ -306,7 +302,8 @@ wait_for_termination_1 (pid_t pid, int interruptible)
break;
}
-#endif /* not WINDOWSNT */
+ /* Note: the MS-Windows emulation of waitpid calls QUIT
+ internally. */
if (interruptible)
QUIT;
}