aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2017-01-01 22:47:55 -0500
committerJames McCoy <jamessan@jamessan.com>2017-01-01 23:20:31 -0500
commit945540b7825e2909d17d8b8867330c3ace7c759c (patch)
treef81c4db6f2d319515519f3d9f4b09226148b49de
parent1feaa450cb024a4cd4eb3ae7ab7e5db683909488 (diff)
downloadrneovim-945540b7825e2909d17d8b8867330c3ace7c759c.tar.gz
rneovim-945540b7825e2909d17d8b8867330c3ace7c759c.tar.bz2
rneovim-945540b7825e2909d17d8b8867330c3ace7c759c.zip
vim-patch:7.4.1868
Problem: Setting really_exiting causes memory leaks to be reported. Solution: Add the in_free_all_mem flag. https://github.com/vim/vim/commit/b89a25f17e274dc308c584ea69a129ffbb26bc3d
-rw-r--r--src/nvim/eval.c6
-rw-r--r--src/nvim/globals.h4
-rw-r--r--src/nvim/memory.c8
-rw-r--r--src/nvim/version.c2
4 files changed, 10 insertions, 10 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index c900cf5dfb..f769016936 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -21569,10 +21569,10 @@ void func_unref(char_u *name)
if (name != NULL && isdigit(*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 {
user_func_unref(fp);
}
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index fbffc2d44d..bc98971c0b 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -636,6 +636,10 @@ EXTERN int exiting INIT(= FALSE);
/* TRUE when planning to exit Vim. Might
* still keep on running if there is a changed
* buffer. */
+#if defined(EXITFREE)
+// true when in or after free_all_mem()
+EXTERN bool entered_free_all_mem INIT(= false);
+#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/nvim/memory.c b/src/nvim/memory.c
index 63914f3a46..ca6aa6381d 100644
--- a/src/nvim/memory.c
+++ b/src/nvim/memory.c
@@ -488,16 +488,12 @@ void time_to_bytes(time_t time_, uint8_t buf[8])
void free_all_mem(void)
{
buf_T *buf, *nextbuf;
- static bool 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;
// Don't want to trigger autocommands from here on.
block_autocmds();
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 7244a53606..61ffb1cae6 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -572,7 +572,7 @@ static int included_patches[] = {
1871,
// 1870 NA
// 1869 NA
- // 1868,
+ 1868,
1867,
1866,
// 1865 NA