diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-12-20 21:35:59 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-12-20 21:35:59 +0000 |
commit | dab17a0689a2f31f69f428975f84b0c3c7ba3030 (patch) | |
tree | 6ab3b3865878fc6de89d4f2654d71b00c5fed833 | |
parent | 39713d3acbfb6673775158a0171c7389c07f25df (diff) | |
download | vim-git-dab17a0689a2f31f69f428975f84b0c3c7ba3030.tar.gz |
patch 8.2.3862: crash on exit with EXITFREE and using win_execute()v8.2.3862
Problem: Crash on exit with EXITFREE and using win_execute().
Solution: Also save and restore tp_topframe. (issue #9374)
-rw-r--r-- | src/evalwindow.c | 4 | ||||
-rw-r--r-- | src/testdir/test_execute_func.vim | 22 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 28 insertions, 0 deletions
diff --git a/src/evalwindow.c b/src/evalwindow.c index c8c1442d2..794d6aa0b 100644 --- a/src/evalwindow.c +++ b/src/evalwindow.c @@ -1250,9 +1250,11 @@ switch_win_noblock( { curtab->tp_firstwin = firstwin; curtab->tp_lastwin = lastwin; + curtab->tp_topframe = topframe; curtab = tp; firstwin = curtab->tp_firstwin; lastwin = curtab->tp_lastwin; + topframe = curtab->tp_topframe; } else goto_tabpage_tp(tp, FALSE, FALSE); @@ -1294,9 +1296,11 @@ restore_win_noblock( { curtab->tp_firstwin = firstwin; curtab->tp_lastwin = lastwin; + curtab->tp_topframe = topframe; curtab = save_curtab; firstwin = curtab->tp_firstwin; lastwin = curtab->tp_lastwin; + topframe = curtab->tp_topframe; } else goto_tabpage_tp(save_curtab, FALSE, FALSE); diff --git a/src/testdir/test_execute_func.vim b/src/testdir/test_execute_func.vim index 06049c272..9146504e5 100644 --- a/src/testdir/test_execute_func.vim +++ b/src/testdir/test_execute_func.vim @@ -3,6 +3,7 @@ source view_util.vim source check.vim source vim9.vim +source term_util.vim func NestedEval() let nested = execute('echo "nested\nlines"') @@ -148,6 +149,27 @@ func Test_win_execute_other_tab() unlet xyz endfunc +func Test_win_execute_on_startup() + CheckRunVimInTerminal + + let lines =<< trim END + vim9script + [repeat('x', &columns)]->writefile('Xfile1') + silent tabedit Xfile2 + var id = win_getid() + silent tabedit Xfile3 + autocmd VimEnter * win_execute(id, 'close') + END + call writefile(lines, 'XwinExecute') + let buf = RunVimInTerminal('-p Xfile1 -Nu XwinExecute', {}) + + " this was crashing on exit with EXITFREE defined + call StopVimInTerminal(buf) + + call delete('XwinExecute') + call delete('Xfile1') +endfunc + func Test_execute_func_with_null() call assert_equal("", execute(test_null_string())) call assert_equal("", execute(test_null_list())) diff --git a/src/version.c b/src/version.c index 022c161ad..bca938231 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3862, +/**/ 3861, /**/ 3860, |