diff options
author | Jason Evans <jasone@canonware.com> | 2014-08-07 00:20:09 (GMT) |
---|---|---|
committer | Jason Evans <jasone@canonware.com> | 2014-08-07 00:20:09 (GMT) |
commit | 7f944aa6213abaf2a4fce526c72b284169a7f462 (patch) | |
tree | 2bdd2901d0e75bab1ba6d29b39aabc47ae67a419 | |
parent | 095819f0119c39f98d9b019ae157501fdc09280e (diff) | |
parent | ea73eb8f3e029f0a5697e78c6771b49063cf4138 (diff) | |
download | jemalloc-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.c | 14 |
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); } |