To:
[email protected]
Subject: Patch 5.6a.026
Fcc: outbox
From: Bram Moolenaar <
[email protected]>
------------
Patch 5.6a.026
Problem: When the SNiFF connection is open, shell commands hang. (Pruemmer)
Solution: Skip a second wait() call if waitpid() already detected that the
child has exited.
Files: src/os_unix.c
*** ../vim-5.6a.25/src/os_unix.c Mon Dec 20 09:59:13 1999
--- src/os_unix.c Fri Jan 14 22:27:22 2000
***************
*** 2171,2177 ****
char_u *newcmd = NULL;
pid_t pid;
! pid_t wait_pid;
#ifdef HAVE_UNION_WAIT
union wait status;
#else
--- 2171,2177 ----
char_u *newcmd = NULL;
pid_t pid;
! pid_t wait_pid = 0;
#ifdef HAVE_UNION_WAIT
union wait status;
#else
***************
*** 2631,2637 ****
--- 2631,2641 ----
#endif
if ((wait_pid == (pid_t)-1 && errno == ECHILD)
|| (wait_pid == pid && WIFEXITED(status)))
+ {
+ wait_pid = pid;
break;
+ }
+ wait_pid = 0;
}
finished:
p_more = p_more_save;
***************
*** 2653,2664 ****
* Wait until our child has exited.
* Ignore wait() returning pids of other children and returning
* because of some signal like SIGWINCH.
*/
! for (;;)
{
wait_pid = wait(&status);
- if (wait_pid == pid)
- break;
if (wait_pid <= 0
#ifdef ECHILD
&& errno == ECHILD
--- 2657,2668 ----
* Wait until our child has exited.
* Ignore wait() returning pids of other children and returning
* because of some signal like SIGWINCH.
+ * Don't wait if wait_pid was already set above, indicating the
+ * child already exited.
*/
! while (wait_pid != pid)
{
wait_pid = wait(&status);
if (wait_pid <= 0
#ifdef ECHILD
&& errno == ECHILD
*** ../vim-5.6a.25/src/version.c Thu Jan 13 23:05:21 2000
--- src/version.c Fri Jan 14 22:24:09 2000
***************
*** 420,421 ****
--- 420,423 ----
{ /* Add new patch number below this line */
+ /**/
+ 26,
/**/
--
hundred-and-one symptoms of being an internet addict:
173. You keep tracking down the email addresses of all your friends
(even childhood friends).
--/-/---- Bram Moolenaar ----
[email protected] ----
[email protected] ---\-\--
\ \ www.vim.org/iccf www.moolenaar.net www.vim.org / /