Mercurial > vim
changeset 3470:4a2cb025b641 v7.3.499
updated for version 7.3.499
Problem: When using any interface language when Vim is waiting for a child
process it gets confused by a child process started through the
interface.
Solution: Always used waitpid() instead of wait(). (Yasuhiro Matsumoto)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Fri, 20 Apr 2012 15:55:16 +0200 |
parents | 67d75c778226 |
children | ab58913dd10b |
files | src/os_unix.c src/version.c |
diffstat | 2 files changed, 9 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/os_unix.c +++ b/src/os_unix.c @@ -3734,24 +3734,21 @@ wait4pid(child, status) while (wait_pid != child) { -# ifdef _THREAD_SAFE - /* Ugly hack: when compiled with Python threads are probably - * used, in which case wait() sometimes hangs for no obvious - * reason. Use waitpid() instead and loop (like the GUI). */ -# ifdef __NeXT__ + /* When compiled with Python threads are probably used, in which case + * wait() sometimes hangs for no obvious reason. Use waitpid() + * instead and loop (like the GUI). Also needed for other interfaces, + * they might call system(). */ +# ifdef __NeXT__ wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0); -# else +# else wait_pid = waitpid(child, status, WNOHANG); -# endif +# endif if (wait_pid == 0) { /* Wait for 1/100 sec before trying again. */ mch_delay(10L, TRUE); continue; } -# else - wait_pid = wait(status); -# endif if (wait_pid <= 0 # ifdef ECHILD && errno == ECHILD