changeset 14573:738e9d1ac4d2 v8.1.0300

patch 8.1.0300: the old window title might be freed twice commit https://github.com/vim/vim/commit/d8f0cef2bdbdc15d7906f991725e09e67c97cf7e Author: Bram Moolenaar <Bram@vim.org> Date: Sun Aug 19 22:20:16 2018 +0200 patch 8.1.0300: the old window title might be freed twice Problem: The old window title might be freed twice. (Dominique Pelle) Solution: Do not free "oldtitle" in a signal handler but set a flag to have it freed later.
author Christian Brabandt <cb@256bit.org>
date Sun, 19 Aug 2018 22:30:05 +0200
parents 7bf554378133
children 4ba20935ebe7
files src/os_unix.c src/version.c
diffstat 2 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -161,6 +161,7 @@ static int get_x11_title(int);
 static int get_x11_icon(int);
 
 static char_u	*oldtitle = NULL;
+static volatile int oldtitle_outdated = FALSE;
 static int	did_set_title = FALSE;
 static char_u	*oldicon = NULL;
 static int	did_set_icon = FALSE;
@@ -1231,8 +1232,9 @@ deathtrap SIGDEFARG(sigarg)
 after_sigcont(void)
 {
 # ifdef FEAT_TITLE
-    // Set oldtitle to NULL, so the current title is obtained again.
-    VIM_CLEAR(oldtitle);
+    // Don't change "oldtitle" in a signal handler, set a flag to obtain it
+    // again later.
+    oldtitle_outdated = TRUE;
 # endif
     settmode(TMODE_RAW);
     need_check_timestamps = TRUE;
@@ -2281,6 +2283,11 @@ mch_settitle(char_u *title, char_u *icon
      */
     if ((type || *T_TS != NUL) && title != NULL)
     {
+	if (oldtitle_outdated)
+	{
+	    oldtitle_outdated = FALSE;
+	    VIM_CLEAR(oldtitle);
+	}
 	if (oldtitle == NULL
 #ifdef FEAT_GUI
 		&& !gui.in_use
--- a/src/version.c
+++ b/src/version.c
@@ -795,6 +795,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    300,
+/**/
     299,
 /**/
     298,