Mercurial > vim
diff src/testdir/test_vim9_func.vim @ 26560:454a1c9ef797 v8.2.3809
patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Commit: https://github.com/vim/vim/commit/7509ad8b0fad56f88288977decbeca3640406c82
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Dec 14 18:14:37 2021 +0000
patch 8.2.3809: Vim9: crash when garbage collecting a nested partial
Problem: Vim9: crash when garbage collecting a nested partial. (Virginia
Senioria)
Solution: Set references in all the funcstacks. (closes #9348)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 14 Dec 2021 19:15:04 +0100 |
parents | dfa658800f21 |
children | 7f90bde42bcc |
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -1903,6 +1903,41 @@ def Test_delfunc() delete('XToDelFunc') enddef +func Test_free_dict_while_in_funcstack() + " relies on the sleep command + CheckUnix + call Run_Test_free_dict_while_in_funcstack() +endfunc + +def Run_Test_free_dict_while_in_funcstack() + + # this was freeing the TermRun() default argument dictionary while it was + # still referenced in a funcstack_T + var lines =<< trim END + vim9script + + &updatetime = 400 + def TermRun(_ = {}) + def Post() + enddef + def Exec() + term_start('sleep 1', { + term_finish: 'close', + exit_cb: (_, _) => Post(), + }) + enddef + Exec() + enddef + nnoremap <F4> <Cmd>call <SID>TermRun()<CR> + timer_start(100, (_) => feedkeys("\<F4>")) + timer_start(1000, (_) => feedkeys("\<F4>")) + sleep 1500m + END + CheckScriptSuccess(lines) + nunmap <F4> + set updatetime& +enddef + def Test_redef_failure() writefile(['def Func0(): string', 'return "Func0"', 'enddef'], 'Xdef') so Xdef