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
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    499,
+/**/
     498,
 /**/
     497,