updated for version 7.4a.044
Problem: Test 96 sometimes fails.
Solution: Clear window from b_wininfo in win_free(). (Suggestion by
Yukihiro Nakadaira)
diff --git a/src/window.c b/src/window.c
index d1c1e93..16e0ee7 100644
--- a/src/window.c
+++ b/src/window.c
@@ -4518,7 +4518,7 @@
#if defined(FEAT_WINDOWS) || defined(PROTO)
/*
- * remove window 'wp' from the window list and free the structure
+ * Remove window 'wp' from the window list and free the structure.
*/
static void
win_free(wp, tp)
@@ -4526,6 +4526,8 @@
tabpage_T *tp; /* tab page "win" is in, NULL for current */
{
int i;
+ buf_T *buf;
+ wininfo_T *wip;
#ifdef FEAT_FOLDING
clearFolding(wp);
@@ -4586,6 +4588,13 @@
vim_free(wp->w_localdir);
+ /* Remove the window from the b_wininfo lists, it may happen that the
+ * freed memory is re-used for another window. */
+ for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+ for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
+ if (wip->wi_win == wp)
+ wip->wi_win = NULL;
+
#ifdef FEAT_SEARCH_EXTRA
clear_matches(wp);
#endif