Mercurial > vim
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. */