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;
}
/*****************************************************************************