diff options
| author | Jason Evans <je@fb.com> | 2012-05-15 21:48:14 (GMT) |
|---|---|---|
| committer | Jason Evans <je@fb.com> | 2012-05-15 21:48:14 (GMT) |
| commit | 781fe75e0a03f13bc1f5403acbbf87796ceea1dc (patch) | |
| tree | 7770a9c45a5769f29dbe000b5b8a5ac69d8a3716 | |
| parent | 3860eac17023933180ef5dfb5bd24077cda57dfe (diff) | |
| download | jemalloc-781fe75e0a03f13bc1f5403acbbf87796ceea1dc.zip jemalloc-781fe75e0a03f13bc1f5403acbbf87796ceea1dc.tar.gz jemalloc-781fe75e0a03f13bc1f5403acbbf87796ceea1dc.tar.bz2 | |
Auto-detect whether running inside Valgrind.
Auto-detect whether running inside Valgrind, thus removing the need to
manually specify MALLOC_CONF=valgrind:true.
| -rw-r--r-- | ChangeLog | 4 | ||||
| -rw-r--r-- | doc/jemalloc.xml.in | 27 | ||||
| -rw-r--r-- | include/jemalloc/internal/jemalloc_internal.h.in | 1 | ||||
| -rw-r--r-- | src/jemalloc.c | 29 |
4 files changed, 31 insertions, 30 deletions
@@ -8,6 +8,10 @@ found in the git revision history: * 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: - Fix heap profiling crash if sampled object is freed via realloc(p, 0). diff --git a/doc/jemalloc.xml.in b/doc/jemalloc.xml.in index 877c500..8a13a22 100644 --- a/doc/jemalloc.xml.in +++ b/doc/jemalloc.xml.in @@ -846,7 +846,9 @@ for (i = 0; i < nbins; i++) { <literal>0x5a</literal>. This is intended for debugging and will impact performance negatively. This option is disabled by default 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 id="opt.quarantine"> @@ -865,8 +867,9 @@ for (i = 0; i < nbins; i++) { enabled. This feature is of particular use in combination with <ulink url="http://valgrind.org/">Valgrind</ulink>, which can detect attempts to access quarantined objects. This is intended for debugging and will - impact performance negatively. The default quarantine size is - 0.</para></listitem> + impact performance negatively. The default quarantine size is 0 unless + running inside Valgrind, in which case the default is 16 + MiB.</para></listitem> </varlistentry> <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 detection. This option is intended for debugging and will impact performance negatively. This option is disabled by - default.</para></listitem> + default unless running inside Valgrind.</para></listitem> </varlistentry> <varlistentry id="opt.zero"> @@ -926,15 +929,9 @@ for (i = 0; i < nbins; i++) { [<option>--enable-valgrind</option>] </term> <listitem><para><ulink url="http://valgrind.org/">Valgrind</ulink> - support enabled/disabled. If enabled, several other options are - automatically modified during options processing to work well with - Valgrind: <link linkend="opt.junk"><mallctl>opt.junk</mallctl></link> - 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> + support enabled/disabled. This option is vestigal because jemalloc + auto-detects whether it is running inside Valgrind. This option is + disabled by default, unless running inside Valgrind.</para></listitem> </varlistentry> <varlistentry id="opt.xmalloc"> @@ -1865,9 +1862,7 @@ malloc_conf = "xmalloc:true";]]></programlisting> it detects, because the performance impact for storing such information would be prohibitive. However, jemalloc does integrate with the most excellent <ulink url="http://valgrind.org/">Valgrind</ulink> tool if the - <option>--enable-valgrind</option> configuration option is enabled and the - <link linkend="opt.valgrind"><mallctl>opt.valgrind</mallctl></link> option - is enabled.</para> + <option>--enable-valgrind</option> configuration option is enabled.</para> </refsect1> <refsect1 id="diagnostic_messages"> <title>DIAGNOSTIC MESSAGES</title> diff --git a/include/jemalloc/internal/jemalloc_internal.h.in b/include/jemalloc/internal/jemalloc_internal.h.in index 268cd14..c6714ec 100644 --- a/include/jemalloc/internal/jemalloc_internal.h.in +++ b/include/jemalloc/internal/jemalloc_internal.h.in @@ -424,6 +424,7 @@ static const bool config_ivsalloc = VALGRIND_FREELIKE_BLOCK(ptr, rzsize); \ } while (0) #else +#define RUNNING_ON_VALGRIND ((unsigned)0) #define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed) #define VALGRIND_RESIZEINPLACE_BLOCK(addr, oldSizeB, newSizeB, rzB) #define VALGRIND_FREELIKE_BLOCK(addr, rzB) diff --git a/src/jemalloc.c b/src/jemalloc.c index bc54cd7..77ea8c8 100644 --- a/src/jemalloc.c +++ b/src/jemalloc.c @@ -377,6 +377,20 @@ malloc_conf_init(void) const char *opts, *k, *v; 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++) { /* Get runtime configuration. */ switch (i) { @@ -553,20 +567,7 @@ malloc_conf_init(void) CONF_HANDLE_BOOL(opt_utrace, "utrace") } if (config_valgrind) { - bool hit; - 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; + CONF_HANDLE_BOOL(opt_valgrind, "valgrind") } if (config_xmalloc) { CONF_HANDLE_BOOL(opt_xmalloc, "xmalloc") |
