Hi all,
When developing a test case for closing a tab page with the temporary
autocmd window when executing an autocmd, I ran into a Vim crash.
The test function that I used is below:
func Test_close_tabpage_with_aucmdwin()
edit one.txt
tabnew two.txt
augroup aucmd_win_test
au!
au BufEnter * if expand('<afile>') == 'one.txt' | tabfirst | tabonly | endif
augroup END
doautoall BufEnter
augroup aucmd_win_test
au!
augroup END
augroup! aucmd_win_test
endfunc
call Test_close_tabpage_with_aucmdwin()
The crash backtrace is below:
frame #0: 0x000000010028c21a vim`goto_tabpage_tp(tp=0x0000000000000000, trigger_enter_autocmds=0, trigger_leave_autocmds=0) at window.c:4268:43
frame #1: 0x0000000100294aae vim`close_tabpage(tab=0x000000010060a920) at window.c:4020:5
frame #2: 0x0000000100007a19 vim`aucmd_restbuf(aco=0x00007ffeefbfd7d0) at autocmd.c:1529:6
frame #3: 0x000000010000754f vim`ex_doautoall(eap=0x00007ffeefbfd9e0) at autocmd.c:1370:6
frame #4: 0x0000000100094fb7 vim`do_one_cmd(cmdlinep=0x00007ffeefbfdca0, sourcing=1, cstack=0x00007ffeefbfdcd8, fgetline=(vim`get_func_line at userfunc.c:4036), cookie=0x0000000102809e00) at ex_docmd.c:2519:2
frame #5: 0x0000000100091df2 vim`do_cmdline(cmdline=0x0000000000000000, fgetline=(vim`get_func_line at userfunc.c:4036), cookie=0x0000000102809e00, flags=7) at ex_docmd.c:979:17
frame #6: 0x0000000100260610 vim`call_user_func(fp=0x00000001006289e0, argcount=0, argvars=0x00007ffeefbfeb30, rettv=0x00007ffeefbfed40, funcexe=0x00007ffeefbfecd0, selfdict=0x0000000000000000) at userfunc.c:1405:2
frame #7: 0x000000010025f584 vim`call_user_func_check(fp=0x00000001006289e0, argcount=0, argvars=0x00007ffeefbfeb30, rettv=0x00007ffeefbfed40, funcexe=0x00007ffeefbfecd0, selfdict=0x0000000000000000) at userfunc.c:1546:2
frame #8: 0x000000010025ec2b vim`call_func(funcname="Test_close_tabpage_with_aucmdwin", len=-1, rettv=0x00007ffeefbfed40, argcount_in=0, argvars_in=0x00007ffeefbfeb30, funcexe=0x00007ffeefbfecd0) at userfunc.c:1993:11
frame #9: 0x000000010025e4ab vim`get_func_tv(name="Test_close_tabpage_with_aucmdwin", len=-1, rettv=0x00007ffeefbfed40, arg=0x00007ffeefbfed70, funcexe=0x00007ffeefbfecd0) at userfunc.c:609:8
frame #10: 0x0000000100266274 vim`ex_call(eap=0x00007ffeefbfef40) at userfunc.c:3855:6
frame #11: 0x0000000100094fb7 vim`do_one_cmd(cmdlinep=0x00007ffeefbff200, sourcing=0, cstack=0x00007ffeefbff238, fgetline=(vim`getexline at ex_getln.c:2709), cookie=0x0000000000000000) at ex_docmd.c:2519:2
frame #12: 0x0000000100091df2 vim`do_cmdline(cmdline=0x0000000000000000, fgetline=(vim`getexline at ex_getln.c:2709), cookie=0x0000000000000000, flags=0) at ex_docmd.c:979:17
frame #13: 0x0000000100137cde vim`nv_colon(cap=0x00007ffeefbff7d8) at normal.c:3319:15
frame #14: 0x0000000100131d7b vim`normal_cmd(oap=0x00007ffeefbff868, toplevel=1) at normal.c:1071:5
frame #15: 0x00000001002d894c vim`main_loop(cmdwin=0, noexmode=0) at main.c:1508:3
frame #16: 0x00000001002d7195 vim`vim_main2 at main.c:898:5
frame #17: 0x00000001002d48d3 vim`main(argc=1, argv=0x00007ffeefbff988) at main.c:442:12
- Yegappan