From: Bram Moolenaar Date: Fri, 20 Apr 2012 13:55:16 +0000 (+0200) Subject: updated for version 7.3.499 X-Git-Tag: v7.3.499 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6be120e7f5cfe9c23fbcd964038bdbc9f626906c;p=vim 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) --- diff --git a/src/os_unix.c b/src/os_unix.c index 043d0a800..860fbcc40 100644 --- 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 diff --git a/src/version.c b/src/version.c index ed92464a4..df3717ab9 100644 --- a/src/version.c +++ b/src/version.c @@ -714,6 +714,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 499, /**/ 498, /**/