Mercurial > vim
changeset 2191:b619655b31db v7.2.446
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 | cb94c42c0e1a |
children | f10829a5bfe5 073ff46fe397 |
files | src/version.c src/window.c |
diffstat | 2 files changed, 11 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/version.c +++ b/src/version.c @@ -682,6 +682,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 446, +/**/ 445, /**/ 444,
--- a/src/window.c +++ b/src/window.c @@ -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_tp = TRUE; + } + + /* Free the memory used for the window. */ + win_free_mem(win, &dir, tp); + + if (free_tp) free_tabpage(tp); - } } /*