summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2014-08-07 00:20:09 (GMT)
committerJason Evans <jasone@canonware.com>2014-08-07 00:20:09 (GMT)
commit7f944aa6213abaf2a4fce526c72b284169a7f462 (patch)
tree2bdd2901d0e75bab1ba6d29b39aabc47ae67a419
parent095819f0119c39f98d9b019ae157501fdc09280e (diff)
parentea73eb8f3e029f0a5697e78c6771b49063cf4138 (diff)
downloadjemalloc-7f944aa6213abaf2a4fce526c72b284169a7f462.zip
jemalloc-7f944aa6213abaf2a4fce526c72b284169a7f462.tar.gz
jemalloc-7f944aa6213abaf2a4fce526c72b284169a7f462.tar.bz2
Merge pull request #103 from wqfish/dev
Fix the bug that causes not allocating free run with lowest address. This fixes a regression due to f9ff60346d7c25ad653ea062e496a5d0864233b2, which was never incorporated into a release.
-rw-r--r--src/arena.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/arena.c b/src/arena.c
index d3fe0fb..118700b 100644
--- a/src/arena.c
+++ b/src/arena.c
@@ -101,14 +101,22 @@ arena_avail_comp(arena_chunk_map_t *a, arena_chunk_map_t *b)
uintptr_t a_mapelm = (uintptr_t)a;
uintptr_t b_mapelm = (uintptr_t)b;
- if (a_mapelm & CHUNK_MAP_KEY)
+ if (a_mapelm & CHUNK_MAP_KEY)
a_size = a_mapelm & ~PAGE_MASK;
else
a_size = arena_mapelm_to_bits(a) & ~PAGE_MASK;
ret = (a_size > b_size) - (a_size < b_size);
- if (ret == 0 && (!(a_mapelm & CHUNK_MAP_KEY)))
- ret = (a_mapelm > b_mapelm) - (a_mapelm < b_mapelm);
+ if (ret == 0) {
+ if (!(a_mapelm & CHUNK_MAP_KEY))
+ ret = (a_mapelm > b_mapelm) - (a_mapelm < b_mapelm);
+ else {
+ /*
+ * Treat keys as if they are lower than anything else.
+ */
+ ret = -1;
+ }
+ }
return (ret);
}