memory: Restore entered_free_all_mem functionality

This commit is contained in:
ZyX 2017-01-07 17:52:53 +03:00
parent 9a09ffa883
commit 35416e89bc
4 changed files with 19 additions and 11 deletions

View File

@ -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);
}

View File

@ -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

View File

@ -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();

View File

@ -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