diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-04-04 22:03:08 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-04-04 22:03:08 +0200 |
commit | 17fe5e1aecbeff5ca4b2a821ede9badd5dddae59 (patch) | |
tree | 67a37b992672212c1e2bde5739f950e067cd833e | |
parent | 4c9ce053d9f2a94cd704342dd4c25670a5995cbd (diff) | |
download | vim-git-17fe5e1aecbeff5ca4b2a821ede9badd5dddae59.tar.gz |
patch 7.4.1710v7.4.1710
Problem: Not all output of an external command is read.
Solution: Avoid timing out when the process has exited. (closes #681)
-rw-r--r-- | src/os_unix.c | 12 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/os_unix.c b/src/os_unix.c index dc8e00952..58a27da05 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -4845,6 +4845,7 @@ mch_call_shell( break; # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H) + if (wait_pid == 0) { struct timeval now_tv; long msec; @@ -4854,7 +4855,7 @@ mch_call_shell( * break out too often to avoid losing typeahead. */ gettimeofday(&now_tv, NULL); msec = (now_tv.tv_sec - start_tv.tv_sec) * 1000L - + (now_tv.tv_usec - start_tv.tv_usec) / 1000L; + + (now_tv.tv_usec - start_tv.tv_usec) / 1000L; if (msec > 2000) { noread_cnt = 5; @@ -4864,10 +4865,15 @@ mch_call_shell( # endif } - /* If we already detected the child has finished break the - * loop now. */ + /* If we already detected the child has finished, continue + * reading output for a short while. Some text may be + * buffered. */ if (wait_pid == pid) + { + if (noread_cnt < 5) + continue; break; + } /* * Check if the child still exists, before checking for diff --git a/src/version.c b/src/version.c index 18a89e4a2..571db823d 100644 --- a/src/version.c +++ b/src/version.c @@ -749,6 +749,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1710, +/**/ 1709, /**/ 1708, |