[7.2.446] Crash in GUI when closing the last window in a tabpage. (ryo7000)
authorBram Moolenaar <Bram@moolenaar.net>
Mon, 12 Jul 2010 21:36:05 +0000 (12 21:36 +0000)
committerBram Moolenaar <Bram@moolenaar.net>
Mon, 12 Jul 2010 21:36:05 +0000 (12 21:36 +0000)
Problem:    Crash in GUI when closing the last window in a tabpage. (ryo7000)

Solution:   Remove the tabpage from the list before freeing the window.

Patch 7.2.446

src/version.c
src/window.c

index c009697..19e64dd 100644 (file)
@@ -682,6 +682,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    446,
+/**/
     445,
 /**/
     444,
index cc114cc..1dccb5a 100644 (file)
@@ -2304,6 +2304,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);
@@ -2321,11 +2322,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;
@@ -2341,8 +2339,14 @@ win_close_othertab(win, free_buf, tp)
            }
            ptp->tp_next = tp->tp_next;
        }
-       free_tabpage(tp);
+       free_tp = TRUE;
     }
+
+    /* Free the memory used for the window. */
+    win_free_mem(win, &dir, tp);
+
+    if (free_tp)
+       free_tabpage(tp);
 }
 
 /*