diff options
author | Bram Moolenaar <Bram@vim.org> | 2011-09-07 14:06:47 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2011-09-07 14:06:47 +0200 |
commit | 493c7a854109804b6a2d81d709bbf9a6dc96c197 (patch) | |
tree | b45536d892cddb4c5901ba16fb6dc1fd5519f1ae | |
parent | 01a78342e05d2ab699258caae26c6df90b34f342 (diff) | |
download | vim-git-493c7a854109804b6a2d81d709bbf9a6dc96c197.tar.gz |
updated for version 7.3.295v7.3.295
Problem: When filtering text with an external command Vim may not read all
the output.
Solution: When select() is interrupted loop and try again. (James Vega)
-rw-r--r-- | src/os_unix.c | 16 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/os_unix.c b/src/os_unix.c index 7b41a90a4..d654f5f3d 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -4819,7 +4819,8 @@ WaitForChar(msec) /* * Wait "msec" msec until a character is available from file descriptor "fd". - * Time == -1 will block forever. + * "msec" == 0 will check for characters once. + * "msec" == -1 will block until a character is available. * When a GUI is being used, this will not be used for input -- webb * Returns also, when a request from Sniff is waiting -- toni. * Or when a Linux GPM mouse event is waiting. @@ -5057,7 +5058,8 @@ RealWaitForChar(fd, msec, check_for_gpm) /* * Select on ready for reading and exceptional condition (end of file). */ - FD_ZERO(&rfds); /* calls bzero() on a sun */ +select_eintr: + FD_ZERO(&rfds); FD_ZERO(&efds); FD_SET(fd, &rfds); # if !defined(__QNX__) && !defined(__CYGWIN32__) @@ -5117,6 +5119,14 @@ RealWaitForChar(fd, msec, check_for_gpm) # else ret = select(maxfd + 1, &rfds, NULL, &efds, tvp); # endif +# ifdef EINTR + if (ret == -1 && errno == EINTR) + /* Interrupted by a signal, need to try again. We ignore msec + * here, because we do want to check even after a timeout if + * characters are available. Needed for reading output of an + * external command after the process has finished. */ + goto select_eintr; +# endif # ifdef __TANDEM if (ret == -1 && errno == ENOTSUP) { @@ -5124,7 +5134,7 @@ RealWaitForChar(fd, msec, check_for_gpm) FD_ZERO(&efds); ret = 0; } -#endif +# endif # ifdef FEAT_MZSCHEME if (ret == 0 && mzquantum_used) /* loop if MzThreads must be scheduled and timeout occurred */ diff --git a/src/version.c b/src/version.c index f1e7dc2f8..f3f0e931f 100644 --- a/src/version.c +++ b/src/version.c @@ -710,6 +710,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 295, +/**/ 294, /**/ 293, |