Patch 7.4.1527
Problem:    Channel test is flaky on MS-Windows.
Solution:   Limit the select() timeout to 50 msec and try with a new socket if
            it fails.
Files:      src/channel.c


*** ../vim-7.4.1526/src/channel.c       2016-03-08 22:33:02.815116985 +0100
--- src/channel.c       2016-03-09 21:47:07.822727537 +0100
***************
*** 628,636 ****
       */
      while (TRUE)
      {
! #ifndef WIN32
!       long elapsed_msec = 0;
! #endif
  
        if (sd >= 0)
            sock_close(sd);
--- 628,635 ----
       */
      while (TRUE)
      {
!       long    elapsed_msec = 0;
!       int     waitnow;
  
        if (sd >= 0)
            sock_close(sd);
***************
*** 688,694 ****
        }
  
        /* If connect() didn't finish then try using select() to wait for the
!        * connection to be made. */
  #ifndef WIN32
        if (errno != ECONNREFUSED)
  #endif
--- 687,693 ----
        }
  
        /* If connect() didn't finish then try using select() to wait for the
!        * connection to be made. For Win32 always use select() to wait. */
  #ifndef WIN32
        if (errno != ECONNREFUSED)
  #endif
***************
*** 702,720 ****
            struct timeval      start_tv;
            struct timeval      end_tv;
  #endif
  
            FD_ZERO(&rfds);
            FD_SET(sd, &rfds);
            FD_ZERO(&wfds);
            FD_SET(sd, &wfds);
  
!           tv.tv_sec = waittime / 1000;
!           tv.tv_usec = (waittime % 1000) * 1000;
  #ifndef WIN32
            gettimeofday(&start_tv, NULL);
  #endif
            ch_logn(channel,
!                   "Waiting for connection (waittime %d msec)...", waittime);
            ret = select((int)sd + 1, &rfds, &wfds, NULL, &tv);
  
            if (ret < 0)
--- 701,722 ----
            struct timeval      start_tv;
            struct timeval      end_tv;
  #endif
+           /* Limit the waittime to 50 msec.  If it doesn't work within this
+            * time we close the socket and try creating it again. */
+           waitnow = waittime > 50 ? 50 : waittime;
  
            FD_ZERO(&rfds);
            FD_SET(sd, &rfds);
            FD_ZERO(&wfds);
            FD_SET(sd, &wfds);
  
!           tv.tv_sec = waitnow / 1000;
!           tv.tv_usec = (waitnow % 1000) * 1000;
  #ifndef WIN32
            gettimeofday(&start_tv, NULL);
  #endif
            ch_logn(channel,
!                   "Waiting for connection (waiting %d msec)...", waitnow);
            ret = select((int)sd + 1, &rfds, &wfds, NULL, &tv);
  
            if (ret < 0)
***************
*** 729,738 ****
            }
  
  #ifdef WIN32
!           /* On Win32: select() is expected to work and wait for up to the
!            * waittime for the socket to be open. */
            if (FD_ISSET(sd, &wfds))
                break;
  #else
            /* On Linux-like systems: See socket(7) for the behavior
             * After putting the socket in non-blocking mode, connect() will
--- 731,746 ----
            }
  
  #ifdef WIN32
!           /* On Win32: select() is expected to work and wait for up to
!            * "waitnow" msec for the socket to be open. */
            if (FD_ISSET(sd, &wfds))
                break;
+           elapsed_msec = waitnow;
+           if (waittime > 1 && elapsed_msec < waittime)
+           {
+               waittime -= elapsed_msec;
+               continue;
+           }
  #else
            /* On Linux-like systems: See socket(7) for the behavior
             * After putting the socket in non-blocking mode, connect() will
***************
*** 778,794 ****
        {
            /* The port isn't ready but we also didn't get an error.
             * This happens when the server didn't open the socket
!            * yet.  Wait a bit and try again. */
!           mch_delay(waittime < 50 ? (long)waittime : 50L, TRUE);
!           ui_breakcheck();
            if (!got_int)
            {
!               /* reduce the waittime by the elapsed time and the 50
!                * msec delay (or a bit more) */
!               waittime -= elapsed_msec;
!               if (waittime > 50)
!                   waittime -= 50;
!               else
                    waittime = 1;
                continue;
            }
--- 786,805 ----
        {
            /* The port isn't ready but we also didn't get an error.
             * This happens when the server didn't open the socket
!            * yet.  Select() may return early, wait until the remaining
!            * "waitnow"  and try again. */
!           waitnow -= elapsed_msec;
!           waittime -= elapsed_msec;
!           if (waitnow > 0)
!           {
!               mch_delay((long)waitnow, TRUE);
!               ui_breakcheck();
!               waittime -= waitnow;
!           }
            if (!got_int)
            {
!               if (waittime <= 0)
!                   /* give it one more try */
                    waittime = 1;
                continue;
            }
*** ../vim-7.4.1526/src/version.c       2016-03-09 20:54:48.200138811 +0100
--- src/version.c       2016-03-09 21:49:02.921497988 +0100
***************
*** 745,746 ****
--- 745,748 ----
  {   /* Add new patch number below this line */
+ /**/
+     1527,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
25. You believe nothing looks sexier than a man in boxer shorts illuminated
    only by a 17" inch svga monitor.

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui