From b89a25f17e274dc308c584ea69a129ffbb26bc3d Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 1 Jun 2016 23:08:39 +0200 Subject: patch 7.4.1868 Problem: Setting really_exiting causes memory leaks to be reported. Solution: Add the in_free_all_mem flag. --- src/eval.c | 5 +++-- src/globals.h | 4 ++++ src/misc2.c | 8 ++------ src/version.c | 2 ++ 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/eval.c b/src/eval.c index 7b8a0ae95..50d1cbae8 100644 --- 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) diff --git a/src/globals.h b/src/globals.h index 5010cd4ae..369eb546e 100644 --- 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 diff --git a/src/misc2.c b/src/misc2.c index f7b1de30d..ae6ca048d 100644 --- 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. */ diff --git a/src/version.c b/src/version.c index 8980b2d3d..ea586106a 100644 --- a/src/version.c +++ b/src/version.c @@ -753,6 +753,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1868, /**/ 1867, /**/ -- cgit v1.2.1