summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQi Wang <interwq@gwu.edu>2022-05-03 15:41:43 -0700
committerQi Wang <interwq@gmail.com>2022-05-05 17:11:18 -0700
commit8cb814629acc7c7a8c1008f47e35d3f40129f5fa (patch)
tree0e3e9d31930989b9a101236561c0d8963cadeab3
parent66c889500a20e6493a6768de6eaa7347daf61483 (diff)
downloadjemalloc-8cb814629acc7c7a8c1008f47e35d3f40129f5fa.tar.gz
Make the default option of zero realloc match the system allocator.
-rw-r--r--configure.ac9
-rw-r--r--doc/jemalloc.xml.in15
-rw-r--r--include/jemalloc/internal/jemalloc_internal_defs.h.in3
-rw-r--r--src/jemalloc.c7
4 files changed, 26 insertions, 8 deletions
diff --git a/configure.ac b/configure.ac
index 5c7a8ef8..f6d25f33 100644
--- a/configure.ac
+++ b/configure.ac
@@ -638,6 +638,7 @@ dnl Define cpp macros in CPPFLAGS, rather than doing AC_DEFINE(macro), since the
dnl definitions need to be seen before any headers are included, which is a pain
dnl to make happen otherwise.
default_retain="0"
+zero_realloc_default_free="0"
maps_coalesce="1"
DUMP_SYMS="${NM} -a"
SYM_PREFIX=""
@@ -684,6 +685,7 @@ case "${host}" in
if test "${LG_SIZEOF_PTR}" = "3"; then
default_retain="1"
fi
+ zero_realloc_default_free="1"
;;
*-*-linux*)
dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE.
@@ -698,6 +700,7 @@ case "${host}" in
if test "${LG_SIZEOF_PTR}" = "3"; then
default_retain="1"
fi
+ zero_realloc_default_free="1"
;;
*-*-kfreebsd*)
dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE.
@@ -773,6 +776,7 @@ case "${host}" in
if test "${LG_SIZEOF_PTR}" = "3"; then
default_retain="1"
fi
+ zero_realloc_default_free="1"
;;
*-*-nto-qnx)
abi="elf"
@@ -1395,6 +1399,11 @@ if test "x$default_retain" = "x1" ; then
AC_DEFINE([JEMALLOC_RETAIN], [ ], [ ])
fi
+dnl Indicate whether realloc(ptr, 0) defaults to the "alloc" behavior.
+if test "x$zero_realloc_default_free" = "x1" ; then
+ AC_DEFINE([JEMALLOC_ZERO_REALLOC_DEFAULT_FREE], [ ], [ ])
+fi
+
dnl Enable allocation from DSS if supported by the OS.
have_dss="1"
dnl Check whether the BSD/SUSv1 sbrk() exists. If not, disable DSS support.
diff --git a/doc/jemalloc.xml.in b/doc/jemalloc.xml.in
index fe4ded96..e28e8f38 100644
--- a/doc/jemalloc.xml.in
+++ b/doc/jemalloc.xml.in
@@ -1578,13 +1578,14 @@ malloc_conf = "xmalloc:true";]]></programlisting>
<literal>r-</literal>
</term>
<listitem><para> Determines the behavior of
- <function>realloc()</function> when passed a value of zero for the new
- size. <quote>alloc</quote> treats this as an allocation of size zero
- (and returns a non-null result except in case of resource exhaustion).
- <quote>free</quote> treats this as a deallocation of the pointer, and
- returns <constant>NULL</constant> without setting
- <varname>errno</varname>. <quote>abort</quote> aborts the process if
- zero is passed. The default is <quote>alloc</quote>.</para>
+ <function>realloc()</function> when passed a value of zero for the new
+ size. <quote>alloc</quote> treats this as an allocation of size zero
+ (and returns a non-null result except in case of resource exhaustion).
+ <quote>free</quote> treats this as a deallocation of the pointer, and
+ returns <constant>NULL</constant> without setting
+ <varname>errno</varname>. <quote>abort</quote> aborts the process if
+ zero is passed. The default is <quote>free</quote> on Linux and
+ Windows, and <quote>alloc</quote> elsewhere.</para>
<para>There is considerable divergence of behaviors across
implementations in handling this case. Many have the behavior of
diff --git a/include/jemalloc/internal/jemalloc_internal_defs.h.in b/include/jemalloc/internal/jemalloc_internal_defs.h.in
index 0cb15d3e..3588072f 100644
--- a/include/jemalloc/internal/jemalloc_internal_defs.h.in
+++ b/include/jemalloc/internal/jemalloc_internal_defs.h.in
@@ -421,4 +421,7 @@
/* Darwin VM_MAKE_TAG support */
#undef JEMALLOC_HAVE_VM_MAKE_TAG
+/* If defined, realloc(ptr, 0) defaults to "free" instead of "alloc". */
+#undef JEMALLOC_ZERO_REALLOC_DEFAULT_FREE
+
#endif /* JEMALLOC_INTERNAL_DEFS_H_ */
diff --git a/src/jemalloc.c b/src/jemalloc.c
index 9c94425c..7655de4e 100644
--- a/src/jemalloc.c
+++ b/src/jemalloc.c
@@ -112,7 +112,12 @@ bool opt_cache_oblivious =
;
zero_realloc_action_t opt_zero_realloc_action =
- zero_realloc_action_alloc;
+#ifdef JEMALLOC_ZERO_REALLOC_DEFAULT_FREE
+ zero_realloc_action_free
+#else
+ zero_realloc_action_alloc
+#endif
+ ;
atomic_zu_t zero_realloc_count = ATOMIC_INIT(0);