Patch 8.1.1259
Problem: Crash when exiting early. (Ralf Schandl)
Solution: Only pop/push the title when it was set. (closes #4334)
Files: src/os_unix.c, src/misc2.c, src/usercmd.c, src/tag.c
*** ../vim-8.1.1258/src/os_unix.c 2019-05-02 23:00:19.227658452 +0200
--- src/os_unix.c 2019-05-03 22:56:29.021478366 +0200
***************
*** 2205,2218 ****
void
mch_restore_title(int which)
{
/* only restore the title or icon when it has been set */
mch_settitle(((which & SAVE_RESTORE_TITLE) && did_set_title) ?
(oldtitle ? oldtitle : p_titleold) : NULL,
((which & SAVE_RESTORE_ICON) && did_set_icon) ? oldicon : NULL);
! // pop and push from/to the stack
! term_pop_title(which);
! term_push_title(which);
}
#endif /* FEAT_TITLE */
--- 2205,2223 ----
void
mch_restore_title(int which)
{
+ int do_push_pop = did_set_title || did_set_icon;
+
/* only restore the title or icon when it has been set */
mch_settitle(((which & SAVE_RESTORE_TITLE) && did_set_title) ?
(oldtitle ? oldtitle : p_titleold) : NULL,
((which & SAVE_RESTORE_ICON) && did_set_icon) ? oldicon : NULL);
! if (do_push_pop)
! {
! // pop and push from/to the stack
! term_pop_title(which);
! term_push_title(which);
! }
}
#endif /* FEAT_TITLE */
*** ../vim-8.1.1258/src/misc2.c 2019-04-28 19:46:17.030060105 +0200
--- src/misc2.c 2019-05-03 23:12:59.332791168 +0200
***************
*** 1068,1074 ****
/* Close all tabs and windows. Reset 'equalalways' to avoid redraws. */
p_ea = FALSE;
! if (first_tabpage->tp_next != NULL)
do_cmdline_cmd((char_u *)"tabonly!");
if (!ONE_WINDOW)
do_cmdline_cmd((char_u *)"only!");
--- 1068,1074 ----
/* Close all tabs and windows. Reset 'equalalways' to avoid redraws. */
p_ea = FALSE;
! if (first_tabpage != NULL && first_tabpage->tp_next != NULL)
do_cmdline_cmd((char_u *)"tabonly!");
if (!ONE_WINDOW)
do_cmdline_cmd((char_u *)"only!");
***************
*** 1085,1113 ****
// Clear user commands (before deleting buffers).
ex_comclear(NULL);
# ifdef FEAT_MENU
! /* Clear menus. */
! do_cmdline_cmd((char_u *)"aunmenu *");
# ifdef FEAT_MULTI_LANG
! do_cmdline_cmd((char_u *)"menutranslate clear");
# endif
# endif
!
! /* Clear mappings, abbreviations, breakpoints. */
! do_cmdline_cmd((char_u *)"lmapclear");
! do_cmdline_cmd((char_u *)"xmapclear");
! do_cmdline_cmd((char_u *)"mapclear");
! do_cmdline_cmd((char_u *)"mapclear!");
! do_cmdline_cmd((char_u *)"abclear");
# if defined(FEAT_EVAL)
! do_cmdline_cmd((char_u *)"breakdel *");
# endif
# if defined(FEAT_PROFILE)
! do_cmdline_cmd((char_u *)"profdel *");
# endif
# if defined(FEAT_KEYMAP)
! do_cmdline_cmd((char_u *)"set keymap=");
#endif
# ifdef FEAT_TITLE
free_titles();
--- 1085,1117 ----
// Clear user commands (before deleting buffers).
ex_comclear(NULL);
+ // When exiting from mainerr_arg_missing curbuf has not been initialized,
+ // and not much else.
+ if (curbuf != NULL)
+ {
# ifdef FEAT_MENU
! // Clear menus.
! do_cmdline_cmd((char_u *)"aunmenu *");
# ifdef FEAT_MULTI_LANG
! do_cmdline_cmd((char_u *)"menutranslate clear");
# endif
# endif
! // Clear mappings, abbreviations, breakpoints.
! do_cmdline_cmd((char_u *)"lmapclear");
! do_cmdline_cmd((char_u *)"xmapclear");
! do_cmdline_cmd((char_u *)"mapclear");
! do_cmdline_cmd((char_u *)"mapclear!");
! do_cmdline_cmd((char_u *)"abclear");
# if defined(FEAT_EVAL)
! do_cmdline_cmd((char_u *)"breakdel *");
# endif
# if defined(FEAT_PROFILE)
! do_cmdline_cmd((char_u *)"profdel *");
# endif
# if defined(FEAT_KEYMAP)
! do_cmdline_cmd((char_u *)"set keymap=");
#endif
+ }
# ifdef FEAT_TITLE
free_titles();
***************
*** 1142,1148 ****
set_expr_line(NULL);
# endif
# ifdef FEAT_DIFF
! diff_clear(curtab);
# endif
clear_sb_text(TRUE); /* free any scrollback text */
--- 1146,1153 ----
set_expr_line(NULL);
# endif
# ifdef FEAT_DIFF
! if (curtab != NULL)
! diff_clear(curtab);
# endif
clear_sb_text(TRUE); /* free any scrollback text */
***************
*** 1172,1188 ****
tabpage_T *tab;
qf_free_all(NULL);
! /* Free all location lists */
FOR_ALL_TAB_WINDOWS(tab, win)
qf_free_all(win);
}
#endif
! /* Close all script inputs. */
close_all_scripts();
! /* Destroy all windows. Must come before freeing buffers. */
! win_free_all();
/* Free all option values. Must come after closing windows. */
free_all_options();
--- 1177,1194 ----
tabpage_T *tab;
qf_free_all(NULL);
! // Free all location lists
FOR_ALL_TAB_WINDOWS(tab, win)
qf_free_all(win);
}
#endif
! // Close all script inputs.
close_all_scripts();
! if (curwin != NULL)
! // Destroy all windows. Must come before freeing buffers.
! win_free_all();
/* Free all option values. Must come after closing windows. */
free_all_options();
***************
*** 1223,1230 ****
reset_last_sourcing();
! free_tabpage(first_tabpage);
! first_tabpage = NULL;
# ifdef UNIX
/* Machine-specific free. */
--- 1229,1239 ----
reset_last_sourcing();
! if (first_tabpage != NULL)
! {
! free_tabpage(first_tabpage);
! first_tabpage = NULL;
! }
# ifdef UNIX
/* Machine-specific free. */
*** ../vim-8.1.1258/src/usercmd.c 2019-05-01 18:08:38.267237229 +0200
--- src/usercmd.c 2019-05-03 22:58:19.848831337 +0200
***************
*** 1045,1051 ****
ex_comclear(exarg_T *eap UNUSED)
{
uc_clear(&ucmds);
! uc_clear(&curbuf->b_ucmds);
}
/*
--- 1045,1052 ----
ex_comclear(exarg_T *eap UNUSED)
{
uc_clear(&ucmds);
! if (curbuf != NULL)
! uc_clear(&curbuf->b_ucmds);
}
/*
*** ../vim-8.1.1258/src/tag.c 2019-04-29 19:47:19.399571862 +0200
--- src/tag.c 2019-05-03 23:01:48.623615434 +0200
***************
*** 2860,2866 ****
free_tag_stuff(void)
{
ga_clear_strings(&tag_fnames);
! do_tag(NULL, DT_FREE, 0, 0, 0);
tag_freematch();
# if defined(FEAT_QUICKFIX)
--- 2860,2867 ----
free_tag_stuff(void)
{
ga_clear_strings(&tag_fnames);
! if (curwin != NULL)
! do_tag(NULL, DT_FREE, 0, 0, 0);
tag_freematch();
# if defined(FEAT_QUICKFIX)
*** ../vim-8.1.1258/src/version.c 2019-05-03 22:25:36.292643839 +0200
--- src/version.c 2019-05-03 23:13:33.340662772 +0200
***************
*** 769,770 ****
--- 769,772 ----
{ /* Add new patch number below this line */
+ /**/
+ 1259,
/**/
--
An indication you must be a manager:
You give constructive feedback to your dog.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.