summaryrefslogtreecommitdiffstats
path: root/src/buffer.c
diff options
context:
space:
mode:
authorCharlie Groves <charlie.groves@gmail.com>2022-04-19 16:24:12 +0100
committerBram Moolenaar <Bram@vim.org>2022-04-19 16:24:12 +0100
commitfef4485ef58d5937b170c6dc69431359469fc9cd (patch)
tree4e028dae2d861040e01a8726128edba96b0b349e /src/buffer.c
parentc448e9c95089b5e7170a0dd36635a226c5eb5b1c (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.c21
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.