summaryrefslogtreecommitdiff
path: root/source/ap/vim/patches/7.3.499
blob: 4e45e4fb7a4e10de798dd0b965ef850780d45813 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
To: vim_dev@googlegroups.com
Subject: Patch 7.3.499
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

Patch 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)
Files:      src/os_unix.c


*** ../vim-7.3.498/src/os_unix.c	2012-02-05 22:51:27.000000000 +0100
--- src/os_unix.c	2012-04-20 15:47:17.000000000 +0200
***************
*** 3734,3757 ****
  
      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__
  	wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
! #  else
  	wait_pid = waitpid(child, status, WNOHANG);
! #  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
--- 3734,3754 ----
  
      while (wait_pid != child)
      {
! 	/* 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
  	wait_pid = waitpid(child, status, WNOHANG);
! # endif
  	if (wait_pid == 0)
  	{
  	    /* Wait for 1/100 sec before trying again. */
  	    mch_delay(10L, TRUE);
  	    continue;
  	}
  	if (wait_pid <= 0
  # ifdef ECHILD
  		&& errno == ECHILD
*** ../vim-7.3.498/src/version.c	2012-04-20 13:46:02.000000000 +0200
--- src/version.c	2012-04-20 15:54:05.000000000 +0200
***************
*** 716,717 ****
--- 716,719 ----
  {   /* Add new patch number below this line */
+ /**/
+     499,
  /**/

-- 
It's not hard to meet expenses, they're everywhere.

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///