To: vim_dev@googlegroups.com Subject: Patch 7.3.295 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.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) Files: src/os_unix.c *** ../vim-7.3.294/src/os_unix.c 2011-08-04 20:31:50.000000000 +0200 --- src/os_unix.c 2011-09-07 13:34:09.000000000 +0200 *************** *** 4819,4825 **** /* * Wait "msec" msec until a character is available from file descriptor "fd". ! * Time == -1 will block forever. * 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. --- 4819,4826 ---- /* * Wait "msec" msec until a character is available from file descriptor "fd". ! * "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,5063 **** /* * Select on ready for reading and exceptional condition (end of file). */ ! FD_ZERO(&rfds); /* calls bzero() on a sun */ FD_ZERO(&efds); FD_SET(fd, &rfds); # if !defined(__QNX__) && !defined(__CYGWIN32__) --- 5058,5065 ---- /* * Select on ready for reading and exceptional condition (end of file). */ ! select_eintr: ! FD_ZERO(&rfds); FD_ZERO(&efds); FD_SET(fd, &rfds); # if !defined(__QNX__) && !defined(__CYGWIN32__) *************** *** 5117,5122 **** --- 5119,5132 ---- # 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,5130 **** FD_ZERO(&efds); ret = 0; } ! #endif # ifdef FEAT_MZSCHEME if (ret == 0 && mzquantum_used) /* loop if MzThreads must be scheduled and timeout occurred */ --- 5134,5140 ---- FD_ZERO(&efds); ret = 0; } ! # endif # ifdef FEAT_MZSCHEME if (ret == 0 && mzquantum_used) /* loop if MzThreads must be scheduled and timeout occurred */ *** ../vim-7.3.294/src/version.c 2011-09-05 20:13:37.000000000 +0200 --- src/version.c 2011-09-07 14:05:05.000000000 +0200 *************** *** 711,712 **** --- 711,714 ---- { /* Add new patch number below this line */ + /**/ + 295, /**/ -- "You're fired." (1980) "You're laid off." (1985) "You're downsized." (1990) "You're rightsized." (1992) (Scott Adams - The Dilbert principle) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///