summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <bram@vim.org>2011-09-07 14:06:47 +0200
committerBram Moolenaar <bram@vim.org>2011-09-07 14:06:47 +0200
commit63a25a5ac0eb67d8f1b3e551a6246a3bb9331a4f (patch)
tree1ff80714536c9ce66a9a5134876ea4b7c456b18f
parentd54ff5d5f424f459e7d0d6aed93f721e82187846 (diff)
downloadvim-63a25a5ac0eb67d8f1b3e551a6246a3bb9331a4f.tar.gz
updated for version 7.3.295v7.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.c16
-rw-r--r--src/version.c2
2 files changed, 15 insertions, 3 deletions
diff --git a/src/os_unix.c b/src/os_unix.c
index 7b41a90a..d654f5f3 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 f1e7dc2f..f3f0e931 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,