patch 8.0.0097
Problem:    When a channel callback consumes a lot of time Vim becomes
            unresponsive. (skywind)
Solution:   Bail out of checking channel readahead after 100 msec.
diff --git a/src/misc2.c b/src/misc2.c
index 27d26be..9fa11e3 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -6263,3 +6263,34 @@
 # endif
 }
 #endif
+
+#ifdef ELAPSED_TIMEVAL  /* proto is defined in vim.h */
+/*
+ * Return time in msec since "start_tv".
+ */
+    long
+elapsed(struct timeval *start_tv)
+{
+    struct timeval  now_tv;
+
+    gettimeofday(&now_tv, NULL);
+    return (now_tv.tv_sec - start_tv->tv_sec) * 1000L
+	 + (now_tv.tv_usec - start_tv->tv_usec) / 1000L;
+}
+#endif
+
+#ifdef ELAPSED_TICKCOUNT
+/*
+ * Return time in msec since "start_tick".
+ */
+    long
+elapsed(DWORD start_tick)
+{
+    DWORD	now = GetTickCount();
+
+    if (now < start_tick)
+	/* overflow */
+	return (long)now;
+    return (long)now - (long)start_tick;
+}
+#endif