summaryrefslogtreecommitdiff
path: root/dev-db/redict/files/redict-7.3.0-system-jemalloc.patch
blob: 802b573dee83e4c2ff26bb77da72b3e9588b8311 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# Patch comes from https://codeberg.org/redict/redict/pulls/40
# https://codeberg.org/redict/redict/pulls/42
# and https://codeberg.org/redict/redict/pulls/43
# All got merged upstream and should be removed next release.

From 5defea5b98859f4e1162b82120114e222b2a7465 Mon Sep 17 00:00:00 2001
From: Maytham Alsudany <maytha8thedev@gmail.com>
Date: Wed, 10 Apr 2024 01:10:49 +0300
Subject: [PATCH 1/2] Add ability to use system jemalloc

This time, this shouldn't cause CI tests to fail.

Co-authored-by: Chris Lamb <lamby@debian.org>
Signed-off-by: Maytham Alsudany <maytha8thedev@gmail.com>
---
 deps/Makefile | 2 ++
 src/Makefile  | 8 +++++++-
 src/debug.c   | 3 +++
 src/object.c  | 5 +++++
 src/sds.c     | 4 ++++
 src/zmalloc.c | 4 ++++
 src/zmalloc.h | 4 ++++
 7 files changed, 29 insertions(+), 1 deletion(-)

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 $(shell $(PKG_CONFIG) --cflags jemalloc)
+	FINAL_LIBS := $(shell $(PKG_CONFIG) --libs jemalloc) $(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 <jemalloc/jemalloc.h>
 #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
-- 
2.39.2


From 940b0fab0318f5f306a67d0818635acc522402c4 Mon Sep 17 00:00:00 2001
From: Maytham Alsudany <maytha8thedev@gmail.com>
Date: Wed, 10 Apr 2024 01:11:24 +0300
Subject: [PATCH 2/2] Mention USE_SYSTEM_JEMALLOC setting in README

Signed-off-by: Maytham Alsudany <maytha8thedev@gmail.com>
---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 14caf183d..ae77a235a 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,8 @@ toolchain, and GNU make. To build Redict, simply run "make".
 You can pass the following variables to Redict to customize the build:
 
 * `USE_JEMALLOC=no MALLOC=libc`: use the libc allocator rather than jemalloc
+* `USE_SYSTEM_JEMALLOC=yes`: use the system's installed jemalloc libraries
+   rather than the vendored copy.
 * `BUILD_TLS=yes`: build with TLS support. Requires OpenSSL.
 * `USE_SYSTEMD=yes`: build with systemd support. Requires libsystemd.
 * `PROG_SUFFIX="-suffix"`: Append "-suffix" to executable names
-- 
2.39.2