aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <janedmundlazo@hotmail.com>2018-08-25 10:40:27 -0400
committerJan Edmund Lazo <janedmundlazo@hotmail.com>2018-08-25 10:52:36 -0400
commite85bed083022c88bd8c42d91f8432eb5dd4ff141 (patch)
tree1174458cf64ac59a6c8d2a0c8d0a0fb4977f400c
parent13f028e4160ba50a95b0a8aa38599c576a21f928 (diff)
downloadrneovim-e85bed083022c88bd8c42d91f8432eb5dd4ff141.tar.gz
rneovim-e85bed083022c88bd8c42d91f8432eb5dd4ff141.tar.bz2
rneovim-e85bed083022c88bd8c42d91f8432eb5dd4ff141.zip
vim-patch:8.0.1214: accessing freed memory when EXITFREE is set
Problem: Accessing freed memory when EXITFREE is set and there is more than one tab and window. (Dominique Pelle) Solution: Free options later. Skip redraw when exiting. https://github.com/vim/vim/commit/4f1982800f0aff28df6875e718a786f6c4b11ad9
-rw-r--r--src/nvim/memory.c4
-rw-r--r--src/nvim/screen.c2
2 files changed, 4 insertions, 2 deletions
diff --git a/src/nvim/memory.c b/src/nvim/memory.c
index d3d0968a5c..8789075c44 100644
--- a/src/nvim/memory.c
+++ b/src/nvim/memory.c
@@ -619,7 +619,6 @@ void free_all_mem(void)
/* Obviously named calls. */
free_all_autocmds();
- free_all_options();
free_all_marks();
alist_clear(&global_alist);
free_homedir();
@@ -657,6 +656,9 @@ void free_all_mem(void)
/* Destroy all windows. Must come before freeing buffers. */
win_free_all();
+ // Free all option values. Must come after closing windows.
+ free_all_options();
+
free_cmdline_buf();
/* Clear registers. */
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index 092820321c..c3996046e0 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -149,7 +149,7 @@ void redraw_later(int type)
void redraw_win_later(win_T *wp, int type)
{
- if (wp->w_redr_type < type) {
+ if (!exiting && wp->w_redr_type < type) {
wp->w_redr_type = type;
if (type >= NOT_VALID)
wp->w_lines_valid = 0;