0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

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)
This commit is contained in:
Charlie Groves
2022-04-19 16:24:12 +01:00
committed by Bram Moolenaar
parent c448e9c950
commit fef4485ef5
3 changed files with 26 additions and 20 deletions

View File

@@ -2068,10 +2068,9 @@ buflist_new(
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 @@ buflist_new(
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 @@ buflist_new(
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.