diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-06-01 23:08:39 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-06-01 23:08:39 +0200 |
commit | b89a25f17e274dc308c584ea69a129ffbb26bc3d (patch) | |
tree | 455bf3eab43488d41987e9e5ef1cebd50e099b71 /src | |
parent | 3c809343c72d9964475f421fd03bb892bc584a51 (diff) | |
download | vim-git-b89a25f17e274dc308c584ea69a129ffbb26bc3d.tar.gz |
patch 7.4.1868v7.4.1868
Problem: Setting really_exiting causes memory leaks to be reported.
Solution: Add the in_free_all_mem flag.
Diffstat (limited to 'src')
-rw-r--r-- | src/eval.c | 5 | ||||
-rw-r--r-- | src/globals.h | 4 | ||||
-rw-r--r-- | src/misc2.c | 8 | ||||
-rw-r--r-- | 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 @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1868, +/**/ 1867, /**/ 1866, |