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.
diff --git a/src/channel.c b/src/channel.c
index a506598..70c4413 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -2371,8 +2371,9 @@
     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 @@
 	    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