aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/memory.c
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2015-04-13 09:30:57 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2015-04-13 09:30:57 -0300
commita9ee85b9fc2d4e3faa466e9c3062cd41315f8456 (patch)
treee45187575c9f0397c5d717780b61adf5b3976a62 /src/nvim/memory.c
parent0248c75bc190ec2fbc8f3af3d61f771e76d628d6 (diff)
parent2d104f14dbd2c60a30e9e1e0fef098b39db087db (diff)
downloadrneovim-a9ee85b9fc2d4e3faa466e9c3062cd41315f8456.tar.gz
rneovim-a9ee85b9fc2d4e3faa466e9c3062cd41315f8456.tar.bz2
rneovim-a9ee85b9fc2d4e3faa466e9c3062cd41315f8456.zip
Merge PR #2415 'Use jemalloc instead of libc allocator'
Diffstat (limited to 'src/nvim/memory.c')
-rw-r--r--src/nvim/memory.c32
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. */