From: Bram Moolenaar Date: Tue, 20 Nov 2018 01:42:43 +0000 (+0100) Subject: patch 8.1.0537: ui_breakcheck() may be called recursively X-Git-Tag: v8.1.0537 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=48d23bb4de3dd37ba0d0b22e7c39d6b894cb1f75;p=vim 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 a1f584e3f..5ae0ae38b 100644 --- a/src/ui.c +++ b/src/ui.c @@ -403,9 +403,17 @@ ui_breakcheck(void) 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 @@ ui_breakcheck_force(int force) updating_screen = TRUE; else reset_updating_screen(FALSE); + + recursive = FALSE; } /***************************************************************************** diff --git a/src/version.c b/src/version.c index c0a5845d5..29488c2a7 100644 --- a/src/version.c +++ b/src/version.c @@ -792,6 +792,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 537, /**/ 536, /**/