updated for version 7.3.306
Problem: When closing a window there is a chance that deleting a scrollbar
triggers a GUI resize, which uses the window while it is not in a
valid state.
Solution: Set the buffer pointer to NULL to be able to detect the invalid
situation. Fix a few places that used the buffer pointer
incorrectly.
diff --git a/src/window.c b/src/window.c
index b3a7f9e..6b803f5 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1226,15 +1226,15 @@
}
newp->w_tagstackidx = oldp->w_tagstackidx;
newp->w_tagstacklen = oldp->w_tagstacklen;
-# ifdef FEAT_FOLDING
+#ifdef FEAT_FOLDING
copyFoldingState(oldp, newp);
-# endif
+#endif
win_init_some(newp, oldp);
-# ifdef FEAT_SYN_HL
+#ifdef FEAT_SYN_HL
check_colorcolumn(newp);
-# endif
+#endif
}
/*
@@ -2212,6 +2212,11 @@
out_flush();
#endif
+#ifdef FEAT_SYN_HL
+ /* Free independent synblock before the buffer is freed. */
+ reset_synblock(win);
+#endif
+
/*
* Close the link to the buffer.
*/
@@ -2222,7 +2227,8 @@
if (!win_valid(win) || last_window() || curtab != prev_curtab)
return;
- /* Free the memory used for the window. */
+ /* Free the memory used for the window and get the window that received
+ * the screen space. */
wp = win_free_mem(win, &dir, NULL);
/* Make sure curwin isn't invalid. It can cause severe trouble when
@@ -3247,6 +3253,9 @@
else
wp->w_farsi = W_CONV;
#endif
+#ifdef FEAT_SYN_HL
+ wp->w_s = &wp->w_buffer->b_s;
+#endif
}
/*
@@ -4437,7 +4446,6 @@
#endif /* FEAT_GUI */
#ifdef FEAT_SYN_HL
- reset_synblock(wp); /* free independent synblock */
vim_free(wp->w_p_cc_cols);
#endif