Auto-detect whether running inside Valgrind.
Auto-detect whether running inside Valgrind, thus removing the need to manually specify MALLOC_CONF=valgrind:true.
This commit is contained in:
parent
3860eac170
commit
781fe75e0a
@ -8,6 +8,10 @@ found in the git revision history:
|
|||||||
|
|
||||||
* 3.x.x (XXX not yet released)
|
* 3.x.x (XXX not yet released)
|
||||||
|
|
||||||
|
New features:
|
||||||
|
- Auto-detect whether running inside Valgrind, thus removing the need to
|
||||||
|
manually specify MALLOC_CONF=valgrind:true.
|
||||||
|
|
||||||
Bug fixes:
|
Bug fixes:
|
||||||
- Fix heap profiling crash if sampled object is freed via realloc(p, 0).
|
- Fix heap profiling crash if sampled object is freed via realloc(p, 0).
|
||||||
|
|
||||||
|
@ -846,7 +846,9 @@ for (i = 0; i < nbins; i++) {
|
|||||||
<literal>0x5a</literal>. This is intended for debugging and will
|
<literal>0x5a</literal>. This is intended for debugging and will
|
||||||
impact performance negatively. This option is disabled by default
|
impact performance negatively. This option is disabled by default
|
||||||
unless <option>--enable-debug</option> is specified during
|
unless <option>--enable-debug</option> is specified during
|
||||||
configuration, in which case it is enabled by default.</para></listitem>
|
configuration, in which case it is enabled by default unless running
|
||||||
|
inside <ulink
|
||||||
|
url="http://valgrind.org/">Valgrind</ulink>.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="opt.quarantine">
|
<varlistentry id="opt.quarantine">
|
||||||
@ -865,8 +867,9 @@ for (i = 0; i < nbins; i++) {
|
|||||||
enabled. This feature is of particular use in combination with <ulink
|
enabled. This feature is of particular use in combination with <ulink
|
||||||
url="http://valgrind.org/">Valgrind</ulink>, which can detect attempts
|
url="http://valgrind.org/">Valgrind</ulink>, which can detect attempts
|
||||||
to access quarantined objects. This is intended for debugging and will
|
to access quarantined objects. This is intended for debugging and will
|
||||||
impact performance negatively. The default quarantine size is
|
impact performance negatively. The default quarantine size is 0 unless
|
||||||
0.</para></listitem>
|
running inside Valgrind, in which case the default is 16
|
||||||
|
MiB.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="opt.redzone">
|
<varlistentry id="opt.redzone">
|
||||||
@ -885,7 +888,7 @@ for (i = 0; i < nbins; i++) {
|
|||||||
which needs redzones in order to do effective buffer overflow/underflow
|
which needs redzones in order to do effective buffer overflow/underflow
|
||||||
detection. This option is intended for debugging and will impact
|
detection. This option is intended for debugging and will impact
|
||||||
performance negatively. This option is disabled by
|
performance negatively. This option is disabled by
|
||||||
default.</para></listitem>
|
default unless running inside Valgrind.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="opt.zero">
|
<varlistentry id="opt.zero">
|
||||||
@ -926,15 +929,9 @@ for (i = 0; i < nbins; i++) {
|
|||||||
[<option>--enable-valgrind</option>]
|
[<option>--enable-valgrind</option>]
|
||||||
</term>
|
</term>
|
||||||
<listitem><para><ulink url="http://valgrind.org/">Valgrind</ulink>
|
<listitem><para><ulink url="http://valgrind.org/">Valgrind</ulink>
|
||||||
support enabled/disabled. If enabled, several other options are
|
support enabled/disabled. This option is vestigal because jemalloc
|
||||||
automatically modified during options processing to work well with
|
auto-detects whether it is running inside Valgrind. This option is
|
||||||
Valgrind: <link linkend="opt.junk"><mallctl>opt.junk</mallctl></link>
|
disabled by default, unless running inside Valgrind.</para></listitem>
|
||||||
and <link linkend="opt.zero"><mallctl>opt.zero</mallctl></link> are set
|
|
||||||
to false, <link
|
|
||||||
linkend="opt.quarantine"><mallctl>opt.quarantine</mallctl></link> is
|
|
||||||
set to 16 MiB, and <link
|
|
||||||
linkend="opt.redzone"><mallctl>opt.redzone</mallctl></link> is set to
|
|
||||||
true. This option is disabled by default.</para></listitem>
|
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="opt.xmalloc">
|
<varlistentry id="opt.xmalloc">
|
||||||
@ -1865,9 +1862,7 @@ malloc_conf = "xmalloc:true";]]></programlisting>
|
|||||||
it detects, because the performance impact for storing such information
|
it detects, because the performance impact for storing such information
|
||||||
would be prohibitive. However, jemalloc does integrate with the most
|
would be prohibitive. However, jemalloc does integrate with the most
|
||||||
excellent <ulink url="http://valgrind.org/">Valgrind</ulink> tool if the
|
excellent <ulink url="http://valgrind.org/">Valgrind</ulink> tool if the
|
||||||
<option>--enable-valgrind</option> configuration option is enabled and the
|
<option>--enable-valgrind</option> configuration option is enabled.</para>
|
||||||
<link linkend="opt.valgrind"><mallctl>opt.valgrind</mallctl></link> option
|
|
||||||
is enabled.</para>
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
<refsect1 id="diagnostic_messages">
|
<refsect1 id="diagnostic_messages">
|
||||||
<title>DIAGNOSTIC MESSAGES</title>
|
<title>DIAGNOSTIC MESSAGES</title>
|
||||||
|
@ -424,6 +424,7 @@ static const bool config_ivsalloc =
|
|||||||
VALGRIND_FREELIKE_BLOCK(ptr, rzsize); \
|
VALGRIND_FREELIKE_BLOCK(ptr, rzsize); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#else
|
#else
|
||||||
|
#define RUNNING_ON_VALGRIND ((unsigned)0)
|
||||||
#define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed)
|
#define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed)
|
||||||
#define VALGRIND_RESIZEINPLACE_BLOCK(addr, oldSizeB, newSizeB, rzB)
|
#define VALGRIND_RESIZEINPLACE_BLOCK(addr, oldSizeB, newSizeB, rzB)
|
||||||
#define VALGRIND_FREELIKE_BLOCK(addr, rzB)
|
#define VALGRIND_FREELIKE_BLOCK(addr, rzB)
|
||||||
|
@ -377,6 +377,20 @@ malloc_conf_init(void)
|
|||||||
const char *opts, *k, *v;
|
const char *opts, *k, *v;
|
||||||
size_t klen, vlen;
|
size_t klen, vlen;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Automatically configure valgrind before processing options. The
|
||||||
|
* valgrind option remains in jemalloc 3.x for compatibility reasons.
|
||||||
|
*/
|
||||||
|
if (config_valgrind) {
|
||||||
|
opt_valgrind = (RUNNING_ON_VALGRIND != 0) ? true : false;
|
||||||
|
if (config_fill && opt_valgrind) {
|
||||||
|
opt_junk = false;
|
||||||
|
assert(opt_zero == false);
|
||||||
|
opt_quarantine = JEMALLOC_VALGRIND_QUARANTINE_DEFAULT;
|
||||||
|
opt_redzone = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
/* Get runtime configuration. */
|
/* Get runtime configuration. */
|
||||||
switch (i) {
|
switch (i) {
|
||||||
@ -553,20 +567,7 @@ malloc_conf_init(void)
|
|||||||
CONF_HANDLE_BOOL(opt_utrace, "utrace")
|
CONF_HANDLE_BOOL(opt_utrace, "utrace")
|
||||||
}
|
}
|
||||||
if (config_valgrind) {
|
if (config_valgrind) {
|
||||||
bool hit;
|
CONF_HANDLE_BOOL(opt_valgrind, "valgrind")
|
||||||
CONF_HANDLE_BOOL_HIT(opt_valgrind,
|
|
||||||
"valgrind", hit)
|
|
||||||
if (config_fill && opt_valgrind && hit) {
|
|
||||||
opt_junk = false;
|
|
||||||
opt_zero = false;
|
|
||||||
if (opt_quarantine == 0) {
|
|
||||||
opt_quarantine =
|
|
||||||
JEMALLOC_VALGRIND_QUARANTINE_DEFAULT;
|
|
||||||
}
|
|
||||||
opt_redzone = true;
|
|
||||||
}
|
|
||||||
if (hit)
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
if (config_xmalloc) {
|
if (config_xmalloc) {
|
||||||
CONF_HANDLE_BOOL(opt_xmalloc, "xmalloc")
|
CONF_HANDLE_BOOL(opt_xmalloc, "xmalloc")
|
||||||
|
Loading…
Reference in New Issue
Block a user