diff options
Diffstat (limited to 'src/nvim/memory.c')
-rw-r--r-- | src/nvim/memory.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/nvim/memory.c b/src/nvim/memory.c index 2223b65a93..2d4259a238 100644 --- a/src/nvim/memory.c +++ b/src/nvim/memory.c @@ -18,6 +18,14 @@ # include "memory.c.generated.h" #endif +#if defined(USE_JEMALLOC) && !defined(UNIT_TESTING) +#include "jemalloc/jemalloc.h" +#define malloc(size) je_malloc(size) +#define calloc(count, size) je_calloc(count, size) +#define realloc(ptr, size) je_realloc(ptr, size) +#define free(ptr) je_free(ptr) +#endif + /// Try to free memory. Used when trying to recover from out of memory errors. /// @see {xmalloc} static void try_to_free_memory(void) @@ -92,6 +100,12 @@ void *xmalloc(size_t size) return ret; } +/// free wrapper that returns delegates to the backing memory manager +void xfree(void *ptr) +{ + free(ptr); +} + /// calloc() wrapper /// /// @see {xmalloc} @@ -362,19 +376,7 @@ size_t xstrlcpy(char *restrict dst, const char *restrict src, size_t size) char *xstrdup(const char *str) FUNC_ATTR_MALLOC FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_RET { - char *ret = strdup(str); - - if (!ret) { - try_to_free_memory(); - ret = strdup(str); - if (!ret) { - mch_errmsg(e_outofmem); - mch_errmsg("\n"); - preserve_exit(); - } - } - - return ret; + return xmemdupz(str, strlen(str)); } /// A version of memchr that starts the search at `src + len`. @@ -541,8 +543,8 @@ void free_all_mem(void) clear_sb_text(); /* free any scrollback text */ /* Free some global vars. */ - free(last_cmdline); - free(new_last_cmdline); + xfree(last_cmdline); + xfree(new_last_cmdline); set_keep_msg(NULL, 0); /* Clear cmdline history. */ |