diff options
author | Charlie Groves <charlie.groves@gmail.com> | 2022-04-19 16:24:12 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-04-19 16:24:12 +0100 |
commit | fef4485ef58d5937b170c6dc69431359469fc9cd (patch) | |
tree | 4e028dae2d861040e01a8726128edba96b0b349e /src/buffer.c | |
parent | c448e9c95089b5e7170a0dd36635a226c5eb5b1c (diff) |
patch 8.2.4791: events triggered in different order when reusing bufferv8.2.4791
Problem: Autocmd events triggered in different order when reusing an empty
buffer.
Solution: Call buff_freeall() earlier. (Charlie Groves, closes #10198)
Diffstat (limited to 'src/buffer.c')
-rw-r--r-- | src/buffer.c | 21 |
1 files changed, 3 insertions, 18 deletions
diff --git a/src/buffer.c b/src/buffer.c index 50aa9e8cc1..461950307c 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -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. |