Fix ALLOCM_ARENA(a) handling in rallocm().
Fix rallocm() to use the specified arena for allocation, not just
deallocation.
Clarify ALLOCM_ARENA(a) documentation.
diff --git a/doc/jemalloc.xml.in b/doc/jemalloc.xml.in
index 8837d34..596f645 100644
--- a/doc/jemalloc.xml.in
+++ b/doc/jemalloc.xml.in
@@ -358,7 +358,7 @@
<listitem><para>Initialize newly allocated memory to contain zero
bytes. In the growing reallocation case, the real size prior to
reallocation defines the boundary between untouched bytes and those
- that are initialized to contain zero bytes. If this option is
+ that are initialized to contain zero bytes. If this macro is
absent, newly allocated memory is uninitialized.</para></listitem>
</varlistentry>
<varlistentry>
@@ -373,9 +373,11 @@
</constant></term>
<listitem><para>Use the arena specified by the index
- <parameter>a</parameter>. This macro does not validate that
- <parameter>a</parameter> specifies an arena in the valid
- range.</para></listitem>
+ <parameter>a</parameter> (and by necessity bypass the thread
+ cache). This macro has no effect for huge regions, nor for regions
+ that were allocated via an arena other than the one specified.
+ This macro does not validate that <parameter>a</parameter>
+ specifies an arena index in the valid range.</para></listitem>
</varlistentry>
</variablelist>
</para>
diff --git a/src/jemalloc.c b/src/jemalloc.c
index 972f454..491ec32 100644
--- a/src/jemalloc.c
+++ b/src/jemalloc.c
@@ -1530,7 +1530,7 @@
if (arena_ind != UINT_MAX) {
arena_chunk_t *chunk;
- try_tcache_alloc = true;
+ try_tcache_alloc = false;
chunk = (arena_chunk_t *)CHUNK_ADDR2BASE(*ptr);
try_tcache_dalloc = (chunk == *ptr || chunk->arena !=
arenas[arena_ind]);