diff options
author | Jason Evans <jasone@canonware.com> | 2015-07-24 18:18:03 -0700 |
---|---|---|
committer | Jason Evans <jasone@canonware.com> | 2015-07-24 18:20:48 -0700 |
commit | 40cbd30d508b0d4e6462f5c36ffdbf6c1f29da22 (patch) | |
tree | 5390c5bcb712213adcf545ca78bfb949ff5a027b | |
parent | 87ccb5554769d915338b9a980d36359a5c6ec3fa (diff) | |
download | jemalloc-40cbd30d508b0d4e6462f5c36ffdbf6c1f29da22.tar.gz |
Fix huge_ralloc_no_move() to succeed more often.
Fix huge_ralloc_no_move() to succeed if an allocation request results in
the same usable size as the existing allocation, even if the request
size is smaller than the usable size. This bug did not cause
correctness issues, but it could cause unnecessary moves during
reallocation.
-rw-r--r-- | src/huge.c | 2 | ||||
-rw-r--r-- | test/integration/rallocx.c | 5 |
2 files changed, 4 insertions, 3 deletions
@@ -298,7 +298,7 @@ huge_ralloc_no_move(void *ptr, size_t oldsize, size_t size, size_t extra, * the new size. */ if (CHUNK_CEILING(oldsize) >= CHUNK_CEILING(usize) - && CHUNK_CEILING(oldsize) <= CHUNK_CEILING(size+extra)) { + && CHUNK_CEILING(oldsize) <= CHUNK_CEILING(s2u(size+extra))) { huge_ralloc_no_move_similar(ptr, oldsize, usize, size, extra, zero); return (false); diff --git a/test/integration/rallocx.c b/test/integration/rallocx.c index b698072..8b6cde3 100644 --- a/test/integration/rallocx.c +++ b/test/integration/rallocx.c @@ -55,8 +55,9 @@ validate_fill(const void *p, uint8_t c, size_t offset, size_t len) for (i = 0; i < len; i++) { uint8_t b = buf[offset+i]; if (b != c) { - test_fail("Allocation at %p contains %#x rather than " - "%#x at offset %zu", p, b, c, offset+i); + test_fail("Allocation at %p (len=%zu) contains %#x " + "rather than %#x at offset %zu", p, len, b, c, + offset+i); ret = true; } } |