diff --git a/src/os_unix.c b/src/os_unix.c
index cda5407..77c96dc 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -176,11 +176,11 @@
 static pid_t wait4pid(pid_t, waitstatus *);
 
 static int  WaitForChar(long);
-static int  WaitForCharOrMouse(long);
+static int  WaitForCharOrMouse(long, int *break_loop);
 #if defined(__BEOS__) || defined(VMS)
-int  RealWaitForChar(int, long, int *);
+int  RealWaitForChar(int, long, int *, int *break_loop);
 #else
-static int  RealWaitForChar(int, long, int *);
+static int  RealWaitForChar(int, long, int *, int *break_loop);
 #endif
 
 #ifdef FEAT_XCLIPBOARD
@@ -366,7 +366,7 @@
 {
     ignored = (int)write(1, (char *)s, len);
     if (p_wd)		/* Unix is too fast, slow down a bit more */
-	RealWaitForChar(read_cmd_fd, p_wd, NULL);
+	RealWaitForChar(read_cmd_fd, p_wd, NULL, NULL);
 }
 
 /*
@@ -4762,7 +4762,7 @@
 		     * to some terminal (vt52?).
 		     */
 		    ++noread_cnt;
-		    while (RealWaitForChar(fromshell_fd, 10L, NULL))
+		    while (RealWaitForChar(fromshell_fd, 10L, NULL, NULL))
 		    {
 			len = read_eintr(fromshell_fd, buffer
 # ifdef FEAT_MBYTE
@@ -5343,7 +5343,7 @@
     void
 mch_breakcheck(void)
 {
-    if (curr_tmode == TMODE_RAW && RealWaitForChar(read_cmd_fd, 0L, NULL))
+    if (curr_tmode == TMODE_RAW && RealWaitForChar(read_cmd_fd, 0L, NULL, NULL))
 	fill_input_buf(FALSE);
 }
 
@@ -5360,10 +5360,11 @@
 #ifdef FEAT_TIMERS
     long    due_time;
     long    remaining = msec;
+    int	    break_loop = FALSE;
 
     /* When waiting very briefly don't trigger timers. */
     if (msec >= 0 && msec < 10L)
-	return WaitForCharOrMouse(msec);
+	return WaitForCharOrMouse(msec, NULL);
 
     while (msec < 0 || remaining > 0)
     {
@@ -5372,14 +5373,18 @@
 	due_time = check_due_timer();
 	if (due_time <= 0 || (msec > 0 && due_time > remaining))
 	    due_time = remaining;
-	if (WaitForCharOrMouse(due_time))
+	if (WaitForCharOrMouse(due_time, &break_loop))
 	    return TRUE;
+	if (break_loop)
+	    /* Nothing available, but need to return so that side effects get
+	     * handled, such as handling a message on a channel. */
+	    return FALSE;
 	if (msec > 0)
 	    remaining -= due_time;
     }
     return FALSE;
 #else
-    return WaitForCharOrMouse(msec);
+    return WaitForCharOrMouse(msec, NULL);
 #endif
 }
 
@@ -5390,7 +5395,7 @@
  * When a GUI is being used, this will never get called -- webb
  */
     static int
-WaitForCharOrMouse(long msec)
+WaitForCharOrMouse(long msec, int *break_loop)
 {
 #ifdef FEAT_MOUSE_GPM
     int		gpm_process_wanted;
@@ -5436,9 +5441,10 @@
 # endif
 # ifdef FEAT_MOUSE_GPM
 	gpm_process_wanted = 0;
-	avail = RealWaitForChar(read_cmd_fd, msec, &gpm_process_wanted);
+	avail = RealWaitForChar(read_cmd_fd, msec,
+					     &gpm_process_wanted, break_loop);
 # else
-	avail = RealWaitForChar(read_cmd_fd, msec, NULL);
+	avail = RealWaitForChar(read_cmd_fd, msec, NULL, break_loop);
 # endif
 	if (!avail)
 	{
@@ -5457,10 +5463,11 @@
 # ifdef FEAT_XCLIPBOARD
 	   || (!avail && rest != 0)
 # endif
-	  );
+	  )
+	;
 
 #else
-    avail = RealWaitForChar(read_cmd_fd, msec, NULL);
+    avail = RealWaitForChar(read_cmd_fd, msec, NULL, &break_loop);
 #endif
     return avail;
 }
@@ -5479,7 +5486,7 @@
 #else
     static int
 #endif
-RealWaitForChar(int fd, long msec, int *check_for_gpm UNUSED)
+RealWaitForChar(int fd, long msec, int *check_for_gpm UNUSED, int *break_loop)
 {
     int		ret;
     int		result;
@@ -5592,6 +5599,8 @@
 	ret = poll(fds, nfd, towait);
 
 	result = ret > 0 && (fds[0].revents & POLLIN);
+	if (break_loop != NULL && ret > 0)
+	    *break_loop = TRUE;
 
 # ifdef FEAT_MZSCHEME
 	if (ret == 0 && mzquantum_used)
@@ -5723,6 +5732,8 @@
 	result = ret > 0 && FD_ISSET(fd, &rfds);
 	if (result)
 	    --ret;
+	if (break_loop != NULL && ret > 0)
+	    *break_loop = TRUE;
 
 # ifdef EINTR
 	if (ret == -1 && errno == EINTR)
diff --git a/src/version.c b/src/version.c
index 28ac3e5..6459356 100644
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1657,
+/**/
     1656,
 /**/
     1655,
