Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
a9c2f0f2
Commit
a9c2f0f2
authored
Nov 23, 2011
by
jbergstroem
Committed by
antirez
Nov 25, 2011
Browse files
Update to jemalloc 2.2.5
parent
7558b1fe
Changes
24
Expand all
Hide whitespace changes
Inline
Side-by-side
deps/jemalloc/ChangeLog
View file @
a9c2f0f2
...
...
@@ -6,6 +6,43 @@ found in the git revision history:
http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git
git://canonware.com/jemalloc.git
* 2.2.5 (November 14, 2011)
Bug fixes:
- Fix huge_ralloc() race when using mremap(2). This is a serious bug that
could cause memory corruption and/or crashes.
- Fix huge_ralloc() to maintain chunk statistics.
- Fix malloc_stats_print(..., "a") output.
* 2.2.4 (November 5, 2011)
Bug fixes:
- Initialize arenas_tsd before using it. This bug existed for 2.2.[0-3], as
well as for --disable-tls builds in earlier releases.
- Do not assume a 4 KiB page size in test/rallocm.c.
* 2.2.3 (August 31, 2011)
This version fixes numerous bugs related to heap profiling.
Bug fixes:
- Fix a prof-related race condition. This bug could cause memory corruption,
but only occurred in non-default configurations (prof_accum:false).
- Fix off-by-one backtracing issues (make sure that prof_alloc_prep() is
excluded from backtraces).
- Fix a prof-related bug in realloc() (only triggered by OOM errors).
- Fix prof-related bugs in allocm() and rallocm().
- Fix prof_tdata_cleanup() for --disable-tls builds.
- Fix a relative include path, to fix objdir builds.
* 2.2.2 (July 30, 2011)
Bug fixes:
- Fix a build error for --disable-tcache.
- Fix assertions in arena_purge() (for real this time).
- Add the --with-private-namespace option. This is a workaround for symbol
conflicts that can inadvertently arise when using static libraries.
* 2.2.1 (March 30, 2011)
Bug fixes:
...
...
deps/jemalloc/INSTALL
View file @
a9c2f0f2
...
...
@@ -42,6 +42,12 @@ any of the following arguments (not a definitive list) to 'configure':
jemalloc overlays the default malloc zone, but makes no attempt to actually
replace the "malloc", "calloc", etc. symbols.
--with-private-namespace=<prefix>
Prefix all library-private APIs with <prefix>. For shared libraries,
symbol visibility mechanisms prevent these symbols from being exported, but
for static libraries, naming collisions are a real possibility. By
default, the prefix is "" (empty string).
--with-install-suffix=<suffix>
Append <suffix> to the base name of all installed files, such that multiple
versions of jemalloc can coexist in the same installation directory. For
...
...
deps/jemalloc/Makefile.in
View file @
a9c2f0f2
...
...
@@ -136,9 +136,9 @@ doc: $(DOCS)
@objroot@lib/libjemalloc@install_suffix@.$(SO)
@
mkdir
-p
$
(
@D
)
ifneq
(@RPATH@, )
$(CC)
-o
$@
$<
@RPATH@@objroot@lib
-L
@objroot@lib
-ljemalloc
@install_suffix@
$(CC)
-o
$@
$<
@RPATH@@objroot@lib
-L
@objroot@lib
-ljemalloc
@install_suffix@
-lpthread
else
$(CC)
-o
$@
$<
-L
@objroot@lib
-ljemalloc
@install_suffix@
$(CC)
-o
$@
$<
-L
@objroot@lib
-ljemalloc
@install_suffix@
-lpthread
endif
install_bin
:
...
...
deps/jemalloc/VERSION
View file @
a9c2f0f2
2.2.
1
-0-g
5ef7abf6d846720fb3fb8c737861c99b5ad1d862
2.2.
5
-0-g
fc1bb70e5f0d9a58b39efa39cc549b5af5104760
deps/jemalloc/configure
View file @
a9c2f0f2
...
...
@@ -617,8 +617,6 @@ enable_prof
enable_stats
enable_debug
install_suffix
jemalloc_cprefix
jemalloc_prefix
AUTOCONF
LD
AR
...
...
@@ -705,6 +703,7 @@ with_xslroot
with_rpath
enable_autogen
with_jemalloc_prefix
with_private_namespace
with_install_suffix
enable_cc_silence
enable_debug
...
...
@@ -1375,6 +1374,8 @@ Optional Packages:
--with-rpath=<rpath> Colon-separated rpath (ELF systems only)
--with-jemalloc-prefix=<prefix>
Prefix to prepend to all public APIs
--with-private-namespace=<prefix>
Prefix to prepend to all library-private APIs
--with-install-suffix=<suffix>
Suffix to append to all installed files
--with-static-libunwind=<libunwind.a>
...
...
@@ -4800,12 +4801,33 @@ _ACEOF
#define JEMALLOC_CPREFIX "
$JEMALLOC_CPREFIX
"
_ACEOF
jemalloc_prefix
=
"
$JEMALLOC_PREFIX
"
jemalloc_cprefix
=
"
$JEMALLOC_CPREFIX
"
cat
>>
confdefs.h
<<
_ACEOF
#define JEMALLOC_P(string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix)
${
JEMALLOC_PREFIX
}
##string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix
_ACEOF
fi
# Check whether --with-private_namespace was given.
if
test
"
${
with_private_namespace
+set
}
"
=
set
;
then
:
withval
=
$with_private_namespace
;
JEMALLOC_PRIVATE_NAMESPACE
=
"
$with_private_namespace
"
else
JEMALLOC_PRIVATE_NAMESPACE
=
""
fi
cat
>>
confdefs.h
<<
_ACEOF
#define JEMALLOC_PRIVATE_NAMESPACE "
$JEMALLOC_PRIVATE_NAMESPACE
"
_ACEOF
if
test
"x
$JEMALLOC_PRIVATE_NAMESPACE
"
!=
"x"
;
then
cat
>>
confdefs.h
<<
_ACEOF
#define JEMALLOC_P(string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix)
${
JEMALLOC_PREFIX
}
##string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix
#define JEMALLOC_N(string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix)
${
JEMALLOC_PRIVATE_NAMESPACE
}
##string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix
_ACEOF
else
cat
>>
confdefs.h
<<
_ACEOF
#define JEMALLOC_N(string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix) string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix
_ACEOF
fi
...
...
@@ -5508,7 +5530,7 @@ fi
if
test
-d
"
${
srcroot
}
.
./.
git"
;
then
if
test
-d
"
${
srcroot
}
.git"
;
then
git describe
--long
--abbrev
=
40
>
${
srcroot
}
VERSION
fi
jemalloc_version
=
`
cat
${
srcroot
}
VERSION
`
...
...
@@ -7346,6 +7368,10 @@ $as_echo "abs_objroot : ${abs_objroot}" >&6; }
$as_echo
""
>
&6
;
}
{
$as_echo
"
$as_me
:
${
as_lineno
-
$LINENO
}
: result: JEMALLOC_PREFIX :
${
JEMALLOC_PREFIX
}
"
>
&5
$as_echo
"JEMALLOC_PREFIX :
${
JEMALLOC_PREFIX
}
"
>
&6
;
}
{
$as_echo
"
$as_me
:
${
as_lineno
-
$LINENO
}
: result: JEMALLOC_PRIVATE_NAMESPACE"
>
&5
$as_echo
"JEMALLOC_PRIVATE_NAMESPACE"
>
&6
;
}
{
$as_echo
"
$as_me
:
${
as_lineno
-
$LINENO
}
: result: :
${
JEMALLOC_PRIVATE_NAMESPACE
}
"
>
&5
$as_echo
" :
${
JEMALLOC_PRIVATE_NAMESPACE
}
"
>
&6
;
}
{
$as_echo
"
$as_me
:
${
as_lineno
-
$LINENO
}
: result: install_suffix :
${
install_suffix
}
"
>
&5
$as_echo
"install_suffix :
${
install_suffix
}
"
>
&6
;
}
{
$as_echo
"
$as_me
:
${
as_lineno
-
$LINENO
}
: result: autogen :
${
enable_autogen
}
"
>
&5
...
...
deps/jemalloc/configure.ac
View file @
a9c2f0f2
...
...
@@ -292,13 +292,22 @@ if test "x$JEMALLOC_PREFIX" != "x" ; then
JEMALLOC_CPREFIX=`echo ${JEMALLOC_PREFIX} | tr "a-z" "A-Z"`
AC_DEFINE_UNQUOTED([JEMALLOC_PREFIX], ["$JEMALLOC_PREFIX"])
AC_DEFINE_UNQUOTED([JEMALLOC_CPREFIX], ["$JEMALLOC_CPREFIX"])
jemalloc_prefix="$JEMALLOC_PREFIX"
jemalloc_cprefix="$JEMALLOC_CPREFIX"
AC_SUBST([jemalloc_prefix])
AC_SUBST([jemalloc_cprefix])
AC_DEFINE_UNQUOTED([JEMALLOC_P(string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix)], [${JEMALLOC_PREFIX}##string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix])
fi
dnl Do not mangle library-private APIs by default.
AC_ARG_WITH([private_namespace],
[AS_HELP_STRING([--with-private-namespace=<prefix>], [Prefix to prepend to all library-private APIs])],
[JEMALLOC_PRIVATE_NAMESPACE="$with_private_namespace"],
[JEMALLOC_PRIVATE_NAMESPACE=""]
)
AC_DEFINE_UNQUOTED([JEMALLOC_PRIVATE_NAMESPACE], ["$JEMALLOC_PRIVATE_NAMESPACE"])
if test "x$JEMALLOC_PRIVATE_NAMESPACE" != "x" ; then
AC_DEFINE_UNQUOTED([JEMALLOC_N(string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix)], [${JEMALLOC_PRIVATE_NAMESPACE}##string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix])
else
AC_DEFINE_UNQUOTED([JEMALLOC_N(string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix)], [string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix])
fi
dnl Do not add suffix to installed files by default.
AC_ARG_WITH([install_suffix],
[AS_HELP_STRING([--with-install-suffix=<suffix>], [Suffix to append to all installed files])],
...
...
@@ -688,7 +697,7 @@ dnl jemalloc configuration.
dnl
dnl Set VERSION if source directory has an embedded git repository.
if test -d "${srcroot}.
./.
git" ; then
if test -d "${srcroot}.git" ; then
git describe --long --abbrev=40 > ${srcroot}VERSION
fi
jemalloc_version=`cat ${srcroot}VERSION`
...
...
@@ -905,6 +914,8 @@ AC_MSG_RESULT([objroot : ${objroot}])
AC_MSG_RESULT([abs_objroot : ${abs_objroot}])
AC_MSG_RESULT([])
AC_MSG_RESULT([JEMALLOC_PREFIX : ${JEMALLOC_PREFIX}])
AC_MSG_RESULT([JEMALLOC_PRIVATE_NAMESPACE])
AC_MSG_RESULT([ : ${JEMALLOC_PRIVATE_NAMESPACE}])
AC_MSG_RESULT([install_suffix : ${install_suffix}])
AC_MSG_RESULT([autogen : ${enable_autogen}])
AC_MSG_RESULT([cc-silence : ${enable_cc_silence}])
...
...
deps/jemalloc/doc/jemalloc.3
View file @
a9c2f0f2
...
...
@@ -2,12 +2,12 @@
.\" Title: JEMALLOC
.\" Author: Jason Evans
.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
.\" Date:
03/30
/2011
.\" Date:
11/14
/2011
.\" Manual: User Manual
.\" Source: jemalloc 2.2.
1
-0-g
5ef7abf6d846720fb3fb8c737861c99b5ad1d862
.\" Source: jemalloc 2.2.
5
-0-g
fc1bb70e5f0d9a58b39efa39cc549b5af5104760
.\" Language: English
.\"
.TH "JEMALLOC" "3" "
03/30
/2011" "jemalloc 2.2.
1
-0-g
5ef7abf6d846
" "User Manual"
.TH "JEMALLOC" "3" "
11/14
/2011" "jemalloc 2.2.
5
-0-g
fc1bb70e5f0d
" "User Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
...
...
@@ -31,7 +31,7 @@
jemalloc \- general purpose memory allocation functions
.SH "LIBRARY"
.PP
This manual describes jemalloc 2\&.2\&.
1
\-0\-g
5ef7abf6d846720fb3fb8c737861c99b5ad1d862
\&. More information can be found at the
This manual describes jemalloc 2\&.2\&.
5
\-0\-g
fc1bb70e5f0d9a58b39efa39cc549b5af5104760
\&. More information can be found at the
\m[blue]\fBjemalloc website\fR\m[]\&\s-2\u[1]\d\s+2\&.
.SH "SYNOPSIS"
.sp
...
...
@@ -1215,7 +1215,7 @@ is successfully written to\&.
Number of file descriptors in use for swap\&.
.RE
.PP
"swap\&.fds" (\fBint *\fR) r
\-
[\fB\-\-enable\-swap\fR]
"swap\&.fds" (\fBint *\fR) r
w
[\fB\-\-enable\-swap\fR]
.RS 4
When written to, the files associated with the specified file descriptors are contiguously mapped via
\fBmmap\fR(2)\&. The resulting virtual memory region is preferred over anonymous
...
...
deps/jemalloc/doc/jemalloc.html
View file @
a9c2f0f2
This diff is collapsed.
Click to expand it.
deps/jemalloc/doc/jemalloc.xml.in
View file @
a9c2f0f2
...
...
@@ -2025,7 +2025,7 @@ malloc_conf = "xmalloc:true";]]></programlisting>
<term>
<mallctl>
swap.fds
</mallctl>
(
<type>
int *
</type>
)
<literal>
r
-
</literal>
<literal>
r
w
</literal>
[
<option>
--enable-swap
</option>
]
</term>
<listitem><para>
When written to, the files associated with the
...
...
deps/jemalloc/include/jemalloc/internal/chunk.h
View file @
a9c2f0f2
...
...
@@ -50,7 +50,7 @@ extern size_t map_bias; /* Number of arena chunk header pages. */
extern
size_t
arena_maxclass
;
/* Max size class for arenas. */
void
*
chunk_alloc
(
size_t
size
,
bool
base
,
bool
*
zero
);
void
chunk_dealloc
(
void
*
chunk
,
size_t
size
);
void
chunk_dealloc
(
void
*
chunk
,
size_t
size
,
bool
unmap
);
bool
chunk_boot
(
void
);
#endif
/* JEMALLOC_H_EXTERNS */
...
...
deps/jemalloc/include/jemalloc/internal/hash.h
View file @
a9c2f0f2
...
...
@@ -26,7 +26,7 @@ uint64_t hash(const void *key, size_t len, uint64_t seed);
JEMALLOC_INLINE
uint64_t
hash
(
const
void
*
key
,
size_t
len
,
uint64_t
seed
)
{
const
uint64_t
m
=
0xc6a4a7935bd1e995
;
const
uint64_t
m
=
0xc6a4a7935bd1e995
LLU
;
const
int
r
=
47
;
uint64_t
h
=
seed
^
(
len
*
m
);
const
uint64_t
*
data
=
(
const
uint64_t
*
)
key
;
...
...
deps/jemalloc/include/jemalloc/internal/jemalloc_internal.h.in
View file @
a9c2f0f2
...
...
@@ -33,6 +33,8 @@
#define JEMALLOC_MANGLE
#include "../jemalloc@install_suffix@.h"
#include "jemalloc/internal/private_namespace.h"
#if (defined(JEMALLOC_OSATOMIC) || defined(JEMALLOC_OSSPIN))
#include <libkern/OSAtomic.h>
#endif
...
...
@@ -633,7 +635,11 @@ ipalloc(size_t usize, size_t alignment, bool zero)
if (usize <= arena_maxclass && alignment <= PAGE_SIZE)
ret = arena_malloc(usize, zero);
else {
size_t run_size = 0;
size_t run_size
#ifdef JEMALLOC_CC_SILENCE
= 0
#endif
;
/*
* Ideally we would only ever call sa2u() once per aligned
...
...
deps/jemalloc/include/jemalloc/internal/private_namespace.h
0 → 100644
View file @
a9c2f0f2
#define arena_bin_index JEMALLOC_N(arena_bin_index)
#define arena_boot JEMALLOC_N(arena_boot)
#define arena_dalloc JEMALLOC_N(arena_dalloc)
#define arena_dalloc_bin JEMALLOC_N(arena_dalloc_bin)
#define arena_dalloc_large JEMALLOC_N(arena_dalloc_large)
#define arena_malloc JEMALLOC_N(arena_malloc)
#define arena_malloc_large JEMALLOC_N(arena_malloc_large)
#define arena_malloc_small JEMALLOC_N(arena_malloc_small)
#define arena_new JEMALLOC_N(arena_new)
#define arena_palloc JEMALLOC_N(arena_palloc)
#define arena_prof_accum JEMALLOC_N(arena_prof_accum)
#define arena_prof_ctx_get JEMALLOC_N(arena_prof_ctx_get)
#define arena_prof_ctx_set JEMALLOC_N(arena_prof_ctx_set)
#define arena_prof_promoted JEMALLOC_N(arena_prof_promoted)
#define arena_purge_all JEMALLOC_N(arena_purge_all)
#define arena_ralloc JEMALLOC_N(arena_ralloc)
#define arena_ralloc_no_move JEMALLOC_N(arena_ralloc_no_move)
#define arena_run_regind JEMALLOC_N(arena_run_regind)
#define arena_salloc JEMALLOC_N(arena_salloc)
#define arena_salloc_demote JEMALLOC_N(arena_salloc_demote)
#define arena_stats_merge JEMALLOC_N(arena_stats_merge)
#define arena_tcache_fill_small JEMALLOC_N(arena_tcache_fill_small)
#define arenas_bin_i_index JEMALLOC_N(arenas_bin_i_index)
#define arenas_extend JEMALLOC_N(arenas_extend)
#define arenas_lrun_i_index JEMALLOC_N(arenas_lrun_i_index)
#define atomic_add_uint32 JEMALLOC_N(atomic_add_uint32)
#define atomic_add_uint64 JEMALLOC_N(atomic_add_uint64)
#define atomic_sub_uint32 JEMALLOC_N(atomic_sub_uint32)
#define atomic_sub_uint64 JEMALLOC_N(atomic_sub_uint64)
#define base_alloc JEMALLOC_N(base_alloc)
#define base_boot JEMALLOC_N(base_boot)
#define base_node_alloc JEMALLOC_N(base_node_alloc)
#define base_node_dealloc JEMALLOC_N(base_node_dealloc)
#define bitmap_full JEMALLOC_N(bitmap_full)
#define bitmap_get JEMALLOC_N(bitmap_get)
#define bitmap_info_init JEMALLOC_N(bitmap_info_init)
#define bitmap_info_ngroups JEMALLOC_N(bitmap_info_ngroups)
#define bitmap_init JEMALLOC_N(bitmap_init)
#define bitmap_set JEMALLOC_N(bitmap_set)
#define bitmap_sfu JEMALLOC_N(bitmap_sfu)
#define bitmap_size JEMALLOC_N(bitmap_size)
#define bitmap_unset JEMALLOC_N(bitmap_unset)
#define bt_init JEMALLOC_N(bt_init)
#define buferror JEMALLOC_N(buferror)
#define choose_arena JEMALLOC_N(choose_arena)
#define choose_arena_hard JEMALLOC_N(choose_arena_hard)
#define chunk_alloc JEMALLOC_N(chunk_alloc)
#define chunk_alloc_dss JEMALLOC_N(chunk_alloc_dss)
#define chunk_alloc_mmap JEMALLOC_N(chunk_alloc_mmap)
#define chunk_alloc_mmap_noreserve JEMALLOC_N(chunk_alloc_mmap_noreserve)
#define chunk_alloc_swap JEMALLOC_N(chunk_alloc_swap)
#define chunk_boot JEMALLOC_N(chunk_boot)
#define chunk_dealloc JEMALLOC_N(chunk_dealloc)
#define chunk_dealloc_dss JEMALLOC_N(chunk_dealloc_dss)
#define chunk_dealloc_mmap JEMALLOC_N(chunk_dealloc_mmap)
#define chunk_dealloc_swap JEMALLOC_N(chunk_dealloc_swap)
#define chunk_dss_boot JEMALLOC_N(chunk_dss_boot)
#define chunk_in_dss JEMALLOC_N(chunk_in_dss)
#define chunk_in_swap JEMALLOC_N(chunk_in_swap)
#define chunk_mmap_boot JEMALLOC_N(chunk_mmap_boot)
#define chunk_swap_boot JEMALLOC_N(chunk_swap_boot)
#define chunk_swap_enable JEMALLOC_N(chunk_swap_enable)
#define ckh_bucket_search JEMALLOC_N(ckh_bucket_search)
#define ckh_count JEMALLOC_N(ckh_count)
#define ckh_delete JEMALLOC_N(ckh_delete)
#define ckh_evict_reloc_insert JEMALLOC_N(ckh_evict_reloc_insert)
#define ckh_insert JEMALLOC_N(ckh_insert)
#define ckh_isearch JEMALLOC_N(ckh_isearch)
#define ckh_iter JEMALLOC_N(ckh_iter)
#define ckh_new JEMALLOC_N(ckh_new)
#define ckh_pointer_hash JEMALLOC_N(ckh_pointer_hash)
#define ckh_pointer_keycomp JEMALLOC_N(ckh_pointer_keycomp)
#define ckh_rebuild JEMALLOC_N(ckh_rebuild)
#define ckh_remove JEMALLOC_N(ckh_remove)
#define ckh_search JEMALLOC_N(ckh_search)
#define ckh_string_hash JEMALLOC_N(ckh_string_hash)
#define ckh_string_keycomp JEMALLOC_N(ckh_string_keycomp)
#define ckh_try_bucket_insert JEMALLOC_N(ckh_try_bucket_insert)
#define ckh_try_insert JEMALLOC_N(ckh_try_insert)
#define create_zone JEMALLOC_N(create_zone)
#define ctl_boot JEMALLOC_N(ctl_boot)
#define ctl_bymib JEMALLOC_N(ctl_bymib)
#define ctl_byname JEMALLOC_N(ctl_byname)
#define ctl_nametomib JEMALLOC_N(ctl_nametomib)
#define extent_tree_ad_first JEMALLOC_N(extent_tree_ad_first)
#define extent_tree_ad_insert JEMALLOC_N(extent_tree_ad_insert)
#define extent_tree_ad_iter JEMALLOC_N(extent_tree_ad_iter)
#define extent_tree_ad_iter_recurse JEMALLOC_N(extent_tree_ad_iter_recurse)
#define extent_tree_ad_iter_start JEMALLOC_N(extent_tree_ad_iter_start)
#define extent_tree_ad_last JEMALLOC_N(extent_tree_ad_last)
#define extent_tree_ad_new JEMALLOC_N(extent_tree_ad_new)
#define extent_tree_ad_next JEMALLOC_N(extent_tree_ad_next)
#define extent_tree_ad_nsearch JEMALLOC_N(extent_tree_ad_nsearch)
#define extent_tree_ad_prev JEMALLOC_N(extent_tree_ad_prev)
#define extent_tree_ad_psearch JEMALLOC_N(extent_tree_ad_psearch)
#define extent_tree_ad_remove JEMALLOC_N(extent_tree_ad_remove)
#define extent_tree_ad_reverse_iter JEMALLOC_N(extent_tree_ad_reverse_iter)
#define extent_tree_ad_reverse_iter_recurse JEMALLOC_N(extent_tree_ad_reverse_iter_recurse)
#define extent_tree_ad_reverse_iter_start JEMALLOC_N(extent_tree_ad_reverse_iter_start)
#define extent_tree_ad_search JEMALLOC_N(extent_tree_ad_search)
#define extent_tree_szad_first JEMALLOC_N(extent_tree_szad_first)
#define extent_tree_szad_insert JEMALLOC_N(extent_tree_szad_insert)
#define extent_tree_szad_iter JEMALLOC_N(extent_tree_szad_iter)
#define extent_tree_szad_iter_recurse JEMALLOC_N(extent_tree_szad_iter_recurse)
#define extent_tree_szad_iter_start JEMALLOC_N(extent_tree_szad_iter_start)
#define extent_tree_szad_last JEMALLOC_N(extent_tree_szad_last)
#define extent_tree_szad_new JEMALLOC_N(extent_tree_szad_new)
#define extent_tree_szad_next JEMALLOC_N(extent_tree_szad_next)
#define extent_tree_szad_nsearch JEMALLOC_N(extent_tree_szad_nsearch)
#define extent_tree_szad_prev JEMALLOC_N(extent_tree_szad_prev)
#define extent_tree_szad_psearch JEMALLOC_N(extent_tree_szad_psearch)
#define extent_tree_szad_remove JEMALLOC_N(extent_tree_szad_remove)
#define extent_tree_szad_reverse_iter JEMALLOC_N(extent_tree_szad_reverse_iter)
#define extent_tree_szad_reverse_iter_recurse JEMALLOC_N(extent_tree_szad_reverse_iter_recurse)
#define extent_tree_szad_reverse_iter_start JEMALLOC_N(extent_tree_szad_reverse_iter_start)
#define extent_tree_szad_search JEMALLOC_N(extent_tree_szad_search)
#define hash JEMALLOC_N(hash)
#define huge_boot JEMALLOC_N(huge_boot)
#define huge_dalloc JEMALLOC_N(huge_dalloc)
#define huge_malloc JEMALLOC_N(huge_malloc)
#define huge_palloc JEMALLOC_N(huge_palloc)
#define huge_prof_ctx_get JEMALLOC_N(huge_prof_ctx_get)
#define huge_prof_ctx_set JEMALLOC_N(huge_prof_ctx_set)
#define huge_ralloc JEMALLOC_N(huge_ralloc)
#define huge_ralloc_no_move JEMALLOC_N(huge_ralloc_no_move)
#define huge_salloc JEMALLOC_N(huge_salloc)
#define iallocm JEMALLOC_N(iallocm)
#define icalloc JEMALLOC_N(icalloc)
#define idalloc JEMALLOC_N(idalloc)
#define imalloc JEMALLOC_N(imalloc)
#define ipalloc JEMALLOC_N(ipalloc)
#define iralloc JEMALLOC_N(iralloc)
#define isalloc JEMALLOC_N(isalloc)
#define ivsalloc JEMALLOC_N(ivsalloc)
#define jemalloc_darwin_init JEMALLOC_N(jemalloc_darwin_init)
#define jemalloc_postfork JEMALLOC_N(jemalloc_postfork)
#define jemalloc_prefork JEMALLOC_N(jemalloc_prefork)
#define malloc_cprintf JEMALLOC_N(malloc_cprintf)
#define malloc_mutex_destroy JEMALLOC_N(malloc_mutex_destroy)
#define malloc_mutex_init JEMALLOC_N(malloc_mutex_init)
#define malloc_mutex_lock JEMALLOC_N(malloc_mutex_lock)
#define malloc_mutex_trylock JEMALLOC_N(malloc_mutex_trylock)
#define malloc_mutex_unlock JEMALLOC_N(malloc_mutex_unlock)
#define malloc_printf JEMALLOC_N(malloc_printf)
#define malloc_write JEMALLOC_N(malloc_write)
#define mb_write JEMALLOC_N(mb_write)
#define pow2_ceil JEMALLOC_N(pow2_ceil)
#define prof_backtrace JEMALLOC_N(prof_backtrace)
#define prof_boot0 JEMALLOC_N(prof_boot0)
#define prof_boot1 JEMALLOC_N(prof_boot1)
#define prof_boot2 JEMALLOC_N(prof_boot2)
#define prof_ctx_get JEMALLOC_N(prof_ctx_get)
#define prof_ctx_set JEMALLOC_N(prof_ctx_set)
#define prof_free JEMALLOC_N(prof_free)
#define prof_gdump JEMALLOC_N(prof_gdump)
#define prof_idump JEMALLOC_N(prof_idump)
#define prof_lookup JEMALLOC_N(prof_lookup)
#define prof_malloc JEMALLOC_N(prof_malloc)
#define prof_mdump JEMALLOC_N(prof_mdump)
#define prof_realloc JEMALLOC_N(prof_realloc)
#define prof_sample_accum_update JEMALLOC_N(prof_sample_accum_update)
#define prof_sample_threshold_update JEMALLOC_N(prof_sample_threshold_update)
#define prof_tdata_init JEMALLOC_N(prof_tdata_init)
#define pthread_create JEMALLOC_N(pthread_create)
#define rtree_get JEMALLOC_N(rtree_get)
#define rtree_get_locked JEMALLOC_N(rtree_get_locked)
#define rtree_new JEMALLOC_N(rtree_new)
#define rtree_set JEMALLOC_N(rtree_set)
#define s2u JEMALLOC_N(s2u)
#define sa2u JEMALLOC_N(sa2u)
#define stats_arenas_i_bins_j_index JEMALLOC_N(stats_arenas_i_bins_j_index)
#define stats_arenas_i_index JEMALLOC_N(stats_arenas_i_index)
#define stats_arenas_i_lruns_j_index JEMALLOC_N(stats_arenas_i_lruns_j_index)
#define stats_cactive_add JEMALLOC_N(stats_cactive_add)
#define stats_cactive_get JEMALLOC_N(stats_cactive_get)
#define stats_cactive_sub JEMALLOC_N(stats_cactive_sub)
#define stats_print JEMALLOC_N(stats_print)
#define szone2ozone JEMALLOC_N(szone2ozone)
#define tcache_alloc_easy JEMALLOC_N(tcache_alloc_easy)
#define tcache_alloc_large JEMALLOC_N(tcache_alloc_large)
#define tcache_alloc_small JEMALLOC_N(tcache_alloc_small)
#define tcache_alloc_small_hard JEMALLOC_N(tcache_alloc_small_hard)
#define tcache_bin_flush_large JEMALLOC_N(tcache_bin_flush_large)
#define tcache_bin_flush_small JEMALLOC_N(tcache_bin_flush_small)
#define tcache_boot JEMALLOC_N(tcache_boot)
#define tcache_create JEMALLOC_N(tcache_create)
#define tcache_dalloc_large JEMALLOC_N(tcache_dalloc_large)
#define tcache_dalloc_small JEMALLOC_N(tcache_dalloc_small)
#define tcache_destroy JEMALLOC_N(tcache_destroy)
#define tcache_event JEMALLOC_N(tcache_event)
#define tcache_get JEMALLOC_N(tcache_get)
#define tcache_stats_merge JEMALLOC_N(tcache_stats_merge)
#define thread_allocated_get JEMALLOC_N(thread_allocated_get)
#define thread_allocated_get_hard JEMALLOC_N(thread_allocated_get_hard)
#define u2s JEMALLOC_N(u2s)
deps/jemalloc/include/jemalloc/internal/prof.h
View file @
a9c2f0f2
...
...
@@ -227,9 +227,60 @@ bool prof_boot2(void);
/******************************************************************************/
#ifdef JEMALLOC_H_INLINES
#define PROF_ALLOC_PREP(nignore, size, ret) do { \
prof_tdata_t *prof_tdata; \
prof_bt_t bt; \
\
assert(size == s2u(size)); \
\
prof_tdata = PROF_TCACHE_GET(); \
if (prof_tdata == NULL) { \
prof_tdata = prof_tdata_init(); \
if (prof_tdata == NULL) { \
ret = NULL; \
break; \
} \
} \
\
if (opt_prof_active == false) { \
/* Sampling is currently inactive, so avoid sampling. */
\
ret = (prof_thr_cnt_t *)(uintptr_t)1U; \
} else if (opt_lg_prof_sample == 0) { \
/* Don't bother with sampling logic, since sampling */
\
/* interval is 1. */
\
bt_init(&bt, prof_tdata->vec); \
prof_backtrace(&bt, nignore, prof_bt_max); \
ret = prof_lookup(&bt); \
} else { \
if (prof_tdata->threshold == 0) { \
/* Initialize. Seed the prng differently for */
\
/* each thread. */
\
prof_tdata->prn_state = \
(uint64_t)(uintptr_t)&size; \
prof_sample_threshold_update(prof_tdata); \
} \
\
/* Determine whether to capture a backtrace based on */
\
/* whether size is enough for prof_accum to reach */
\
/* prof_tdata->threshold. However, delay updating */
\
/* these variables until prof_{m,re}alloc(), because */
\
/* we don't know for sure that the allocation will */
\
/* succeed. */
\
/* */
\
/* Use subtraction rather than addition to avoid */
\
/* potential integer overflow. */
\
if (size >= prof_tdata->threshold - \
prof_tdata->accum) { \
bt_init(&bt, prof_tdata->vec); \
prof_backtrace(&bt, nignore, prof_bt_max); \
ret = prof_lookup(&bt); \
} else \
ret = (prof_thr_cnt_t *)(uintptr_t)1U; \
} \
} while (0)
#ifndef JEMALLOC_ENABLE_INLINE
void
prof_sample_threshold_update
(
prof_tdata_t
*
prof_tdata
);
prof_thr_cnt_t
*
prof_alloc_prep
(
size_t
size
);
prof_ctx_t
*
prof_ctx_get
(
const
void
*
ptr
);
void
prof_ctx_set
(
const
void
*
ptr
,
prof_ctx_t
*
ctx
);
bool
prof_sample_accum_update
(
size_t
size
);
...
...
@@ -272,71 +323,6 @@ prof_sample_threshold_update(prof_tdata_t *prof_tdata)
+
(
uint64_t
)
1U
;
}
JEMALLOC_INLINE
prof_thr_cnt_t
*
prof_alloc_prep
(
size_t
size
)
{
#ifdef JEMALLOC_ENABLE_INLINE
/* This function does not have its own stack frame, because it is inlined. */
# define NIGNORE 1
#else
# define NIGNORE 2
#endif
prof_thr_cnt_t
*
ret
;
prof_tdata_t
*
prof_tdata
;
prof_bt_t
bt
;
assert
(
size
==
s2u
(
size
));
prof_tdata
=
PROF_TCACHE_GET
();
if
(
prof_tdata
==
NULL
)
{
prof_tdata
=
prof_tdata_init
();
if
(
prof_tdata
==
NULL
)
return
(
NULL
);
}
if
(
opt_prof_active
==
false
)
{
/* Sampling is currently inactive, so avoid sampling. */
ret
=
(
prof_thr_cnt_t
*
)(
uintptr_t
)
1U
;
}
else
if
(
opt_lg_prof_sample
==
0
)
{
/*
* Don't bother with sampling logic, since sampling interval is
* 1.
*/
bt_init
(
&
bt
,
prof_tdata
->
vec
);
prof_backtrace
(
&
bt
,
NIGNORE
,
prof_bt_max
);
ret
=
prof_lookup
(
&
bt
);
}
else
{
if
(
prof_tdata
->
threshold
==
0
)
{
/*
* Initialize. Seed the prng differently for each
* thread.
*/
prof_tdata
->
prn_state
=
(
uint64_t
)(
uintptr_t
)
&
size
;
prof_sample_threshold_update
(
prof_tdata
);
}
/*
* Determine whether to capture a backtrace based on whether
* size is enough for prof_accum to reach
* prof_tdata->threshold. However, delay updating these
* variables until prof_{m,re}alloc(), because we don't know
* for sure that the allocation will succeed.
*
* Use subtraction rather than addition to avoid potential
* integer overflow.
*/
if
(
size
>=
prof_tdata
->
threshold
-
prof_tdata
->
accum
)
{
bt_init
(
&
bt
,
prof_tdata
->
vec
);
prof_backtrace
(
&
bt
,
NIGNORE
,
prof_bt_max
);
ret
=
prof_lookup
(
&
bt
);
}
else
ret
=
(
prof_thr_cnt_t
*
)(
uintptr_t
)
1U
;
}
return
(
ret
);
#undef NIGNORE
}
JEMALLOC_INLINE
prof_ctx_t
*
prof_ctx_get
(
const
void
*
ptr
)
{
...
...
@@ -415,7 +401,7 @@ prof_malloc(const void *ptr, size_t size, prof_thr_cnt_t *cnt)
* always possible to tell in advance how large an
* object's usable size will be, so there should never
* be a difference between the size passed to
*
prof_alloc_prep
() and prof_malloc().
*
PROF_ALLOC_PREP
() and prof_malloc().
*/
assert
((
uintptr_t
)
cnt
==
(
uintptr_t
)
1U
);
}
...
...
@@ -459,7 +445,7 @@ prof_realloc(const void *ptr, size_t size, prof_thr_cnt_t *cnt,
if
(
prof_sample_accum_update
(
size
))
{
/*
* Don't sample. The size passed to
*
prof_alloc_prep
() was larger than what
*
PROF_ALLOC_PREP
() was larger than what
* actually got allocated, so a backtrace was
* captured for this allocation, even though
* its actual size was insufficient to cross
...
...
deps/jemalloc/include/jemalloc/jemalloc_defs.h.in
View file @
a9c2f0f2
...
...
@@ -18,6 +18,15 @@
#undef JEMALLOC_P
#endif
/*
* JEMALLOC_PRIVATE_NAMESPACE is used as a prefix for all library-private APIs.
* For shared libraries, symbol visibility mechanisms prevent these symbols
* from being exported, but for static libraries, naming collisions are a real
* possibility.
*/
#undef JEMALLOC_PRIVATE_NAMESPACE
#undef JEMALLOC_N
/*
* Hyper-threaded CPUs may need a special instruction inside spin loops in
* order to yield to another virtual CPU.
...
...
deps/jemalloc/src/arena.c
View file @
a9c2f0f2
...
...
@@ -569,7 +569,7 @@ arena_chunk_dealloc(arena_t *arena, arena_chunk_t *chunk)
arena
->
ndirty
-=
spare
->
ndirty
;
}
malloc_mutex_unlock
(
&
arena
->
lock
);
chunk_dealloc
((
void
*
)
spare
,
chunksize
);
chunk_dealloc
((
void
*
)
spare
,
chunksize
,
true
);
malloc_mutex_lock
(
&
arena
->
lock
);
#ifdef JEMALLOC_STATS
arena
->
stats
.
mapped
-=
chunksize
;
...
...
@@ -869,9 +869,9 @@ arena_purge(arena_t *arena, bool all)
assert
(
ndirty
==
arena
->
ndirty
);
#endif
assert
(
arena
->
ndirty
>
arena
->
npurgatory
||
all
);
assert
(
arena
->
ndirty
>
chunk_npages
||
all
);
assert
(
arena
->
ndirty
-
arena
->
npurgatory
>
chunk_npages
||
all
);
assert
((
arena
->
nactive
>>
opt_lg_dirty_mult
)
<
(
arena
->
ndirty
-
npurgatory
)
||
all
);
arena
->
npurgatory
)
||
all
);
#ifdef JEMALLOC_STATS
arena
->
stats
.
npurge
++
;
...
...
@@ -1657,6 +1657,7 @@ arena_prof_promoted(const void *ptr, size_t size)
assert
(
ptr
!=
NULL
);
assert
(
CHUNK_ADDR2BASE
(
ptr
)
!=
ptr
);
assert
(
isalloc
(
ptr
)
==
PAGE_SIZE
);
assert
(
size
<=
small_maxclass
);
chunk
=
(
arena_chunk_t
*
)
CHUNK_ADDR2BASE
(
ptr
);
pageind
=
((
uintptr_t
)
ptr
-
(
uintptr_t
)
chunk
)
>>
PAGE_SHIFT
;
...
...
deps/jemalloc/src/chunk.c
View file @
a9c2f0f2
...
...
@@ -70,7 +70,7 @@ RETURN:
#ifdef JEMALLOC_IVSALLOC
if
(
base
==
false
&&
ret
!=
NULL
)
{
if
(
rtree_set
(
chunks_rtree
,
(
uintptr_t
)
ret
,
ret
))
{
chunk_dealloc
(
ret
,
size
);
chunk_dealloc
(
ret
,
size
,
true
);
return
(
NULL
);
}
}
...
...
@@ -108,7 +108,7 @@ RETURN:
}
void
chunk_dealloc
(
void
*
chunk
,
size_t
size
)
chunk_dealloc
(
void
*
chunk
,
size_t
size
,
bool
unmap
)
{
assert
(
chunk
!=
NULL
);
...
...
@@ -125,15 +125,17 @@ chunk_dealloc(void *chunk, size_t size)
malloc_mutex_unlock
(
&
chunks_mtx
);
#endif
if
(
unmap
)
{
#ifdef JEMALLOC_SWAP
if
(
swap_enabled
&&
chunk_dealloc_swap
(
chunk
,
size
)
==
false
)
return
;
if
(
swap_enabled
&&
chunk_dealloc_swap
(
chunk
,
size
)
==
false
)
return
;
#endif
#ifdef JEMALLOC_DSS
if
(
chunk_dealloc_dss
(
chunk
,
size
)
==
false
)
return
;
if
(
chunk_dealloc_dss
(
chunk
,
size
)
==
false
)
return
;
#endif
chunk_dealloc_mmap
(
chunk
,
size
);
chunk_dealloc_mmap
(
chunk
,
size
);
}
}
bool
...
...
deps/jemalloc/src/ckh.c
View file @
a9c2f0f2
...
...
@@ -556,7 +556,7 @@ ckh_string_hash(const void *key, unsigned minbits, size_t *hash1, size_t *hash2)
}
else
{
ret1
=
h
;
ret2
=
hash
(
key
,
strlen
((
const
char
*
)
key
),
0x8432a476666bbc13U
);
0x8432a476666bbc13
LL
U
);
}
*
hash1
=
ret1
;
...
...
deps/jemalloc/src/ctl.c
View file @
a9c2f0f2
...
...
@@ -1151,11 +1151,13 @@ thread_arena_ctl(const size_t *mib, size_t miblen, void *oldp, size_t *oldlenp,
/* Set new arena association. */
ARENA_SET
(
arena
);
#ifdef JEMALLOC_TCACHE
{
tcache_t
*
tcache
=
TCACHE_GET
();
if
(
tcache
!=
NULL
)
tcache
->
arena
=
arena
;
}
#endif
}
ret
=
0
;
...
...
deps/jemalloc/src/huge.c
View file @
a9c2f0f2
...
...
@@ -110,12 +110,12 @@ huge_palloc(size_t size, size_t alignment, bool zero)
if
(
offset
==
0
)
{
/* Trim trailing space. */
chunk_dealloc
((
void
*
)((
uintptr_t
)
ret
+
chunk_size
),
alloc_size
-
chunk_size
);
-
chunk_size
,
true
);
}
else
{
size_t
trailsize
;
/* Trim leading space. */
chunk_dealloc
(
ret
,
alignment
-
offset
);
chunk_dealloc
(
ret
,
alignment
-
offset
,
true
);
ret
=
(
void
*
)((
uintptr_t
)
ret
+
(
alignment
-
offset
));
...
...
@@ -124,7 +124,7 @@ huge_palloc(size_t size, size_t alignment, bool zero)
/* Trim trailing space. */
assert
(
trailsize
<
alloc_size
);
chunk_dealloc
((
void
*
)((
uintptr_t
)
ret
+
chunk_size
),
trailsize
);
trailsize
,
true
);
}
}
...
...
@@ -234,6 +234,13 @@ huge_ralloc(void *ptr, size_t oldsize, size_t size, size_t extra,
)
{
size_t
newsize
=
huge_salloc
(
ret
);
/*
* Remove ptr from the tree of huge allocations before
* performing the remap operation, in order to avoid the
* possibility of another thread acquiring that mapping before
* this one removes it from the tree.
*/
huge_dalloc
(
ptr
,
false
);
if
(
mremap
(
ptr
,
oldsize
,
newsize
,
MREMAP_MAYMOVE
|
MREMAP_FIXED
,
ret
)
==
MAP_FAILED
)
{
/*
...
...
@@ -253,9 +260,8 @@ huge_ralloc(void *ptr, size_t oldsize, size_t size, size_t extra,
if
(
opt_abort
)
abort
();
memcpy
(
ret
,
ptr
,
copysize
);
idalloc
(
ptr
);
}
else
huge_dalloc
(
ptr
,
false
);
chunk_dealloc_mmap
(
ptr
,
oldsize
);
}
}
else
#endif
{
...
...
@@ -295,9 +301,10 @@ huge_dalloc(void *ptr, bool unmap)
memset
(
node
->
addr
,
0x5a
,
node
->
size
);
#endif
#endif
chunk_dealloc
(
node
->
addr
,
node
->
size
);
}
chunk_dealloc
(
node
->
addr
,
node
->
size
,
unmap
);
base_node_dealloc
(
node
);
}
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment