patch 8.1.0537: ui_breakcheck() may be called recursively

Problem:    ui_breakcheck() may be called recursively, which doesn't work.
Solution:   When called recursively, just return. (James McCoy, closes #3617)
diff --git a/src/ui.c b/src/ui.c
index a1f584e..5ae0ae3 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -403,9 +403,17 @@
     void
 ui_breakcheck_force(int force)
 {
-    int save_updating_screen = updating_screen;
+    static int	recursive = FALSE;
+    int		save_updating_screen = updating_screen;
 
-    /* We do not want gui_resize_shell() to redraw the screen here. */
+    // We could be called recursively if stderr is redirected, calling
+    // fill_input_buf() calls settmode() when stdin isn't a tty.  settmode()
+    // calls vgetorpeek() which calls ui_breakcheck() again.
+    if (recursive)
+	return;
+    recursive = TRUE;
+
+    // We do not want gui_resize_shell() to redraw the screen here.
     ++updating_screen;
 
 #ifdef FEAT_GUI
@@ -419,6 +427,8 @@
 	updating_screen = TRUE;
     else
 	reset_updating_screen(FALSE);
+
+    recursive = FALSE;
 }
 
 /*****************************************************************************