# HG changeset patch # User Bram Moolenaar # Date 1563305405 -7200 # Node ID e24bbd061233d8d27ed38c10210b39d955f0a8e0 # Parent daac0d4d56d036841ed10eaed7c6678e42c22593 patch 8.1.1703: breaking out of loop by checking window pointer insufficient commit https://github.com/vim/vim/commit/61386408063a2300d7d7f42c5156f66f6252fb54 Author: Bram Moolenaar Date: Tue Jul 16 21:19:55 2019 +0200 patch 8.1.1703: breaking out of loop by checking window pointer insufficient Problem: Breaking out of loop by checking window pointer is insufficient. Solution: Check the window ID and the buffer number. (closes https://github.com/vim/vim/issues/4683) diff --git a/src/misc2.c b/src/misc2.c --- a/src/misc2.c +++ b/src/misc2.c @@ -4442,7 +4442,8 @@ has_non_ascii(char_u *s) void parse_queued_messages(void) { - win_T *old_curwin = curwin; + int old_curwin_id = curwin->w_id; + int old_curbuf_fnum = curbuf->b_fnum; int i; int save_may_garbage_collect = may_garbage_collect; @@ -4494,9 +4495,9 @@ parse_queued_messages(void) may_garbage_collect = save_may_garbage_collect; - // If the current window changed we need to bail out of the waiting loop. - // E.g. when a job exit callback closes the terminal window. - if (curwin != old_curwin) + // If the current window or buffer changed we need to bail out of the + // waiting loop. E.g. when a job exit callback closes the terminal window. + if (curwin->w_id != old_curwin_id || curbuf->b_fnum != old_curbuf_fnum) ins_char_typebuf(K_IGNORE); } #endif diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -778,6 +778,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1703, +/**/ 1702, /**/ 1701,