patch 8.2.4791: events triggered in different order when reusing buffer
Problem: Autocmd events triggered in different order when reusing an empty
buffer.
Solution: Call buff_freeall() earlier. (Charlie Groves, closes #10198)
diff --git a/src/buffer.c b/src/buffer.c
index 50aa9e8..4619503 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2068,10 +2068,9 @@
buf = curbuf;
// It's like this buffer is deleted. Watch out for autocommands that
// change curbuf! If that happens, allocate a new buffer anyway.
- if (curbuf->b_p_bl)
- apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf);
- if (buf == curbuf)
- apply_autocmds(EVENT_BUFWIPEOUT, NULL, NULL, FALSE, curbuf);
+ buf_freeall(buf, BFA_WIPE | BFA_DEL);
+ if (buf != curbuf) // autocommands deleted the buffer!
+ return NULL;
#ifdef FEAT_EVAL
if (aborting()) // autocmds may abort script processing
{
@@ -2079,12 +2078,6 @@
return NULL;
}
#endif
- if (buf == curbuf)
- {
- // Make sure 'bufhidden' and 'buftype' are empty
- clear_string_option(&buf->b_p_bh);
- clear_string_option(&buf->b_p_bt);
- }
}
if (buf != curbuf || curbuf == NULL)
{
@@ -2132,14 +2125,6 @@
if (buf == curbuf)
{
- // free all things allocated for this buffer
- buf_freeall(buf, 0);
- if (buf != curbuf) // autocommands deleted the buffer!
- return NULL;
-#if defined(FEAT_EVAL)
- if (aborting()) // autocmds may abort script processing
- return NULL;
-#endif
free_buffer_stuff(buf, FALSE); // delete local variables et al.
// Init the options.
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index 724d073..fd36317 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
Binary files differ
diff --git a/src/version.c b/src/version.c
index 9a76fdf..b00e0e8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4791,
+/**/
4790,
/**/
4789,