changeset 8757:4fb37555e814 v7.4.1667

commit https://github.com/vim/vim/commit/84e1d2b21a424f2687b61daaf84f5fc4f1ab0abe Author: Bram Moolenaar <Bram@vim.org> Date: Mon Mar 28 14:20:41 2016 +0200 patch 7.4.1667 Problem: Win32: waiting on a pipe with fixed sleep time. Solution: Start with a short delay and increase it when looping.
author Christian Brabandt <cb@256bit.org>
date Mon, 28 Mar 2016 14:30:05 +0200
parents 72dbac4224b8
children b9b73c04e542
files src/channel.c src/version.c
diffstat 2 files changed, 14 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -2371,8 +2371,9 @@ channel_wait(channel_T *channel, sock_T 
     if (fd != channel->CH_SOCK_FD)
     {
 	DWORD	nread;
-	int	diff;
+	int	sleep_time;
 	DWORD	deadline = GetTickCount() + timeout;
+	int	delay = 1;
 
 	/* reading from a pipe, not a socket */
 	while (TRUE)
@@ -2380,12 +2381,17 @@ channel_wait(channel_T *channel, sock_T 
 	    if (PeekNamedPipe((HANDLE)fd, NULL, 0, NULL, &nread, NULL)
 								 && nread > 0)
 		return OK;
-	    diff = deadline - GetTickCount();
-	    if (diff <= 0)
+	    sleep_time = deadline - GetTickCount();
+	    if (sleep_time <= 0)
 		break;
-	    /* Wait for 5 msec.
-	     * TODO: increase the sleep time when looping more often */
-	    Sleep(5);
+	    /* Wait for a little while.  Very short at first, up to 10 msec
+	     * after looping a few times. */
+	    if (sleep_time > delay)
+		sleep_time = delay;
+	    Sleep(sleep_time);
+	    delay = delay * 2;
+	    if (delay > 10)
+		delay = 10;
 	}
     }
     else
--- 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 */
 /**/
+    1667,
+/**/
     1666,
 /**/
     1665,