From 3be8585661f8b0a9b94e9bc1db6ebfa097c3270f Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 12 Jun 2014 14:01:31 +0200 Subject: updated for version 7.4.320 Problem: Possible crash when an BufLeave autocommand deletes the buffer. Solution: Check for the window pointer being valid. Postpone freeing the window until autocommands are done. (Yasuhiro Matsumoto) --- src/fileio.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/fileio.c') diff --git a/src/fileio.c b/src/fileio.c index a45ec2cfd..38dc2597d 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -9549,7 +9549,8 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) /* * When stopping to execute autocommands, restore the search patterns and - * the redo buffer. Free buffers in the au_pending_free_buf list. + * the redo buffer. Free any buffers in the au_pending_free_buf list and + * free any windows in the au_pending_free_win list. */ if (!autocmd_busy) { @@ -9562,6 +9563,12 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) vim_free(au_pending_free_buf); au_pending_free_buf = b; } + while (au_pending_free_win != NULL) + { + win_T *w = au_pending_free_win->w_next; + vim_free(au_pending_free_win); + au_pending_free_win = w; + } } /* -- cgit v1.2.1