mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
memory: Restore entered_free_all_mem functionality
This commit is contained in:
parent
9a09ffa883
commit
35416e89bc
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user