Mercurial > vim
changeset 15052:35c2d164a630 v8.1.0537
patch 8.1.0537: ui_breakcheck() may be called recursively
commit https://github.com/vim/vim/commit/48d23bb4de3dd37ba0d0b22e7c39d6b894cb1f75
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Nov 20 02:42:43 2018 +0100
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 https://github.com/vim/vim/issues/3617)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 20 Nov 2018 02:45:06 +0100 |
parents | f6b3fe138e84 |
children | f15ec8ab8ac7 |
files | src/ui.c src/version.c |
diffstat | 2 files changed, 15 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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; - - /* We do not want gui_resize_shell() to redraw the screen here. */ + static int recursive = FALSE; + int save_updating_screen = updating_screen; + + // 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; } /*****************************************************************************