changeset 2306:9577a28005e1 vim73

updated for version 7.2.446 Problem: Crash in GUI when closing the last window in a tabpage. (ryo7000) Solution: Remove the tabpage from the list before freeing the window.
author Bram Moolenaar <bram@vim.org>
date Mon, 12 Jul 2010 21:38:19 +0200
parents 4b00cb7347fc
children 81527f127fb1
files src/window.c
diffstat 1 files changed, 9 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.c
+++ b/src/window.c
@@ -2307,6 +2307,7 @@ win_close_othertab(win, free_buf, tp)
     win_T	*wp;
     int		dir;
     tabpage_T   *ptp = NULL;
+    int		free_tp = FALSE;
 
     /* Close the link to the buffer. */
     close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
@@ -2324,11 +2325,8 @@ win_close_othertab(win, free_buf, tp)
     if (wp == NULL)
 	return;
 
-    /* Free the memory used for the window. */
-    wp = win_free_mem(win, &dir, tp);
-
     /* When closing the last window in a tab page remove the tab page. */
-    if (wp == NULL)
+    if (tp == NULL ? firstwin == lastwin : tp->tp_firstwin == tp->tp_lastwin)
     {
 	if (tp == first_tabpage)
 	    first_tabpage = tp->tp_next;
@@ -2344,8 +2342,14 @@ win_close_othertab(win, free_buf, tp)
 	    }
 	    ptp->tp_next = tp->tp_next;
 	}
+	free_tp = TRUE;
+    }
+
+    /* Free the memory used for the window. */
+    win_free_mem(win, &dir, tp);
+
+    if (free_tp)
 	free_tabpage(tp);
-    }
 }
 
 /*