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.
diff --git a/src/buffer.c b/src/buffer.c
index 6489168..ac37685 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -450,6 +450,11 @@
     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,6 +549,19 @@
 	    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
 
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index 43aa8d4..c029ca1 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -83,6 +83,16 @@
   quit
 endfunc
 
+function Test_autocmd_bufwinleave_with_tabfirst()
+  tabedit
+  augroup sample
+    autocmd!
+    autocmd BufWinLeave <buffer> 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
diff --git a/src/version.c b/src/version.c
index 4ab697b..89e5f95 100644
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2328,
+/**/
     2327,
 /**/
     2326,