aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/eval.c7
-rw-r--r--src/nvim/globals.h4
-rw-r--r--src/nvim/memory.c15
-rw-r--r--src/nvim/memory.h4
4 files changed, 19 insertions, 11 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index b7a30a4c12..a046b2a288 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -21665,9 +21665,12 @@ void func_unref(char_u *name)
fp = find_func(name);
if (fp == NULL) {
#ifdef EXITFREE
- if (!entered_free_all_mem) // NOLINT(readability/braces)
-#endif
+ if (!entered_free_all_mem) {
EMSG2(_(e_intern2), "func_unref()");
+ }
+#else
+ EMSG2(_(e_intern2), "func_unref()");
+#endif
} else {
user_func_unref(fp);
}
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index 2b9abb1cc5..5ee04ad982 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -632,10 +632,6 @@ 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 3c0d001848..a5045dfffc 100644
--- a/src/nvim/memory.c
+++ b/src/nvim/memory.c
@@ -48,6 +48,11 @@ MemRealloc mem_realloc = &realloc;
# include "memory.c.generated.h"
#endif
+#ifdef EXITFREE
+/// Indicates that free_all_mem function was or is running
+bool entered_free_all_mem = false;
+#endif
+
/// Try to free memory. Used when trying to recover from out of memory errors.
/// @see {xmalloc}
void try_to_free_memory(void)
@@ -511,13 +516,13 @@ 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)
+ // When we cause a crash here it is caught and Vim tries to exit cleanly.
+ // Don't try freeing everything again.
+ if (entered_free_all_mem) {
return;
- entered = true;
+ }
+ entered_free_all_mem = true;
// Don't want to trigger autocommands from here on.
block_autocmds();
diff --git a/src/nvim/memory.h b/src/nvim/memory.h
index 0b422957d5..d82972cffc 100644
--- a/src/nvim/memory.h
+++ b/src/nvim/memory.h
@@ -15,6 +15,10 @@ extern MemFree mem_free;
extern MemCalloc mem_calloc;
extern MemRealloc mem_realloc;
+#ifdef EXITFREE
+extern bool entered_free_all_mem;
+#endif
+
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "memory.h.generated.h"
#endif