summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-04-04 22:03:08 +0200
committerBram Moolenaar <Bram@vim.org>2016-04-04 22:03:08 +0200
commit17fe5e1aecbeff5ca4b2a821ede9badd5dddae59 (patch)
tree67a37b992672212c1e2bde5739f950e067cd833e
parent4c9ce053d9f2a94cd704342dd4c25670a5995cbd (diff)
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.c12
-rw-r--r--src/version.c2
2 files changed, 11 insertions, 3 deletions
diff --git a/src/os_unix.c b/src/os_unix.c
index dc8e00952a..58a27da050 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 18a89e4a23..571db823d7 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,