diff --git a/deps/Makefile b/deps/Makefile index 9a273aefc..345e1f703 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -39,7 +39,9 @@ distclean: -(cd hiredict && $(MAKE) clean) > /dev/null || true -(cd linenoise && $(MAKE) clean) > /dev/null || true -(cd lua && $(MAKE) clean) > /dev/null || true +ifneq ($(USE_SYSTEM_JEMALLOC),yes) -(cd jemalloc && [ -f Makefile ] && $(MAKE) distclean) > /dev/null || true +endif -(cd hdr_histogram && $(MAKE) clean) > /dev/null || true -(cd fpconv && $(MAKE) clean) > /dev/null || true -(rm -f .make-*) diff --git a/src/Makefile b/src/Makefile index 0739466b6..d399c6eb2 100644 --- a/src/Makefile +++ b/src/Makefile @@ -266,10 +266,16 @@ ifeq ($(MALLOC),tcmalloc_minimal) endif ifeq ($(MALLOC),jemalloc) + FINAL_CFLAGS+= -DUSE_JEMALLOC +ifeq ($(USE_SYSTEM_JEMALLOC),yes) + FINAL_CFLAGS+= -DUSE_SYSTEM_JEMALLOC -I/usr/include/jemalloc/include + FINAL_LIBS := -ljemalloc $(FINAL_LIBS) +else DEPENDENCY_TARGETS+= jemalloc - FINAL_CFLAGS+= -DUSE_JEMALLOC -I../deps/jemalloc/include + FINAL_CFLAGS+= -I../deps/jemalloc/include FINAL_LIBS := ../deps/jemalloc/lib/libjemalloc.a $(FINAL_LIBS) endif +endif # LIBSSL & LIBCRYPTO LIBSSL_LIBS= diff --git a/src/debug.c b/src/debug.c index 89d33bfd7..2257d655e 100644 --- a/src/debug.c +++ b/src/debug.c @@ -56,6 +56,9 @@ void bugReportEnd(int killViaSignal, int sig); void logStackTrace(void *eip, int uplevel, int current_thread); void sigalrmSignalHandler(int sig, siginfo_t *info, void *secret); +#if defined(USE_JEMALLOC) && defined(USE_SYSTEM_JEMALLOC) +#define je_mallctl mallctl +#endif /* ================================= Debugging ============================== */ /* Compute the sha1 of string at 's' with 'len' bytes long. diff --git a/src/object.c b/src/object.c index cf7811e81..5da8fbcc9 100644 --- a/src/object.c +++ b/src/object.c @@ -15,6 +15,11 @@ #define strtold(a,b) ((long double)strtod((a),(b))) #endif +#if defined(USE_JEMALLOC) && defined(USE_SYSTEM_JEMALLOC) +#define je_mallctl mallctl +#define je_malloc_stats_print malloc_stats_print +#endif + /* ===================== Creation and parsing of objects ==================== */ robj *createObject(int type, void *ptr) { diff --git a/src/sds.c b/src/sds.c index 0a295132c..a1ac73d5a 100644 --- a/src/sds.c +++ b/src/sds.c @@ -24,6 +24,10 @@ #include "sds.h" #include "sdsalloc.h" +#if defined(USE_JEMALLOC) && defined(USE_SYSTEM_JEMALLOC) +#define je_nallocx nallocx +#endif + const char *SDS_NOINIT = "SDS_NOINIT"; static inline int sdsHdrSize(char type) { diff --git a/src/zmalloc.c b/src/zmalloc.c index d737e2b14..7187599aa 100644 --- a/src/zmalloc.c +++ b/src/zmalloc.c @@ -56,6 +56,9 @@ void zlibc_free(void *ptr) { #define free(ptr) tc_free(ptr) /* Explicitly override malloc/free etc when using jemalloc. */ #elif defined(USE_JEMALLOC) +#if defined(USE_SYSTEM_JEMALLOC) +#define je_mallctl mallctl +#else #define malloc(size) je_malloc(size) #define calloc(count,size) je_calloc(count,size) #define realloc(ptr,size) je_realloc(ptr,size) @@ -63,6 +66,7 @@ void zlibc_free(void *ptr) { #define mallocx(size,flags) je_mallocx(size,flags) #define dallocx(ptr,flags) je_dallocx(ptr,flags) #endif +#endif #define update_zmalloc_stat_alloc(__n) atomicIncr(used_memory,(__n)) #define update_zmalloc_stat_free(__n) atomicDecr(used_memory,(__n)) diff --git a/src/zmalloc.h b/src/zmalloc.h index df7d290da..c10858439 100644 --- a/src/zmalloc.h +++ b/src/zmalloc.h @@ -27,7 +27,11 @@ #include #if (JEMALLOC_VERSION_MAJOR == 2 && JEMALLOC_VERSION_MINOR >= 1) || (JEMALLOC_VERSION_MAJOR > 2) #define HAVE_MALLOC_SIZE 1 +#if defined(USE_SYSTEM_JEMALLOC) +#define zmalloc_size(p) malloc_usable_size(p) +#else #define zmalloc_size(p) je_malloc_usable_size(p) +#endif #else #error "Newer version of jemalloc required" #endif