To: vim_dev@googlegroups.com Subject: Patch 7.4.2328 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.2328 Problem: Crash when BufWinLeave autocmd goes to another tab page. (Hirohito Higashi) Solution: Make close_buffer() go back to the right window. Files: src/buffer.c, src/testdir/test_autocmd.vim *** ../vim-7.4.2327/src/buffer.c 2016-09-04 19:57:53.193539060 +0200 --- src/buffer.c 2016-09-04 21:26:17.486209540 +0200 *************** *** 450,455 **** --- 450,460 ---- int is_curbuf; int nwindows; bufref_T bufref; + # ifdef FEAT_WINDOWS + int is_curwin = (curwin!= NULL && curwin->w_buffer == buf); + win_T *the_curwin = curwin; + tabpage_T *the_curtab = curtab; + # endif #endif int unload_buf = (action != 0); int del_buf = (action == DOBUF_DEL || action == DOBUF_WIPE); *************** *** 544,549 **** --- 549,567 ---- return; # endif } + + # ifdef FEAT_WINDOWS + /* If the buffer was in curwin and the window has changed, go back to that + * window, if it still exists. This avoids that ":edit x" triggering a + * "tabnext" BufUnload autocmd leaves a window behind without a buffer. */ + if (is_curwin && curwin != the_curwin && win_valid_any_tab(the_curwin)) + { + block_autocmds(); + goto_tabpage_win(the_curtab, the_curwin); + unblock_autocmds(); + } + # endif + nwindows = buf->b_nwindows; #endif *** ../vim-7.4.2327/src/testdir/test_autocmd.vim 2016-09-04 19:50:50.520985732 +0200 --- src/testdir/test_autocmd.vim 2016-09-04 20:53:24.930517597 +0200 *************** *** 83,88 **** --- 83,98 ---- quit endfunc + function Test_autocmd_bufwinleave_with_tabfirst() + tabedit + augroup sample + autocmd! + autocmd BufWinLeave tabfirst + augroup END + call setline(1, ['a', 'b', 'c']) + edit! a.txt + endfunc + " SEGV occurs in older versions. (At least 7.4.2321 or older) function Test_autocmd_bufunload_avoiding_SEGV_01() split aa.txt *** ../vim-7.4.2327/src/version.c 2016-09-04 20:44:38.506814027 +0200 --- src/version.c 2016-09-04 21:32:06.343322216 +0200 *************** *** 765,766 **** --- 765,768 ---- { /* Add new patch number below this line */ + /**/ + 2328, /**/ -- "The question of whether computers can think is just like the question of whether submarines can swim." -- Edsger W. Dijkstra /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///