changeset 9169:0ea97a753a2d v7.4.1868

commit https://github.com/vim/vim/commit/b89a25f17e274dc308c584ea69a129ffbb26bc3d Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jun 1 23:08:39 2016 +0200 patch 7.4.1868 Problem: Setting really_exiting causes memory leaks to be reported. Solution: Add the in_free_all_mem flag.
author Christian Brabandt <cb@256bit.org>
date Wed, 01 Jun 2016 23:15:06 +0200
parents 702732dc3ed7
children 7cae03af1bb4
files src/eval.c src/globals.h src/misc2.c src/version.c
diffstat 4 files changed, 11 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -25350,8 +25350,9 @@ func_unref(char_u *name)
 	fp = find_func(name);
 	if (fp == NULL)
 	{
-	    /* Ignore when invoked through free_all_mem(). */
-	    if (!really_exiting)
+#ifdef EXITFREE
+	    if (!entered_free_all_mem)
+#endif
 		EMSG2(_(e_intern2), "func_unref()");
 	}
 	else if (--fp->uf_refcount <= 0)
--- a/src/globals.h
+++ b/src/globals.h
@@ -635,6 +635,10 @@ EXTERN int	exiting INIT(= FALSE);
 EXTERN int	really_exiting INIT(= FALSE);
 				/* TRUE when we are sure to exit, e.g., after
 				 * a deadly signal */
+#if defined(EXITFREE)
+EXTERN int	entered_free_all_mem INIT(= FALSE);
+				/* TRUE when in or after free_all_mem() */
+#endif
 /* volatile because it is used in signal handler deathtrap(). */
 EXTERN volatile int full_screen INIT(= FALSE);
 				/* TRUE when doing full-screen output
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1036,16 +1036,12 @@ static void free_findfile(void);
 free_all_mem(void)
 {
     buf_T	*buf, *nextbuf;
-    static int	entered = FALSE;
 
     /* When we cause a crash here it is caught and Vim tries to exit cleanly.
      * Don't try freeing everything again. */
-    if (entered)
+    if (entered_free_all_mem)
 	return;
-    entered = TRUE;
-
-    /* Set this flag to indicate some errors can be ignored. */
-    really_exiting = TRUE;
+    entered_free_all_mem = TRUE;
 
 # ifdef FEAT_AUTOCMD
     /* Don't want to trigger autocommands from here on. */
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1868,
+/**/
     1867,
 /**/
     1866,