# HG changeset patch # User Christian Brabandt # Date 1459800931 -7200 # Node ID 210e767296d9c02e6d8d1e252f2d87601630a19b # Parent d526a0ea94b3e64507ac4bab2b5ac80e55f199d4 commit https://github.com/vim/vim/commit/17fe5e1aecbeff5ca4b2a821ede9badd5dddae59 Author: Bram Moolenaar Date: Mon Apr 4 22:03:08 2016 +0200 patch 7.4.1710 Problem: Not all output of an external command is read. Solution: Avoid timing out when the process has exited. (closes https://github.com/vim/vim/issues/681) diff --git a/src/os_unix.c b/src/os_unix.c --- 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 --- 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,