aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2015-07-24 18:18:03 -0700
committerJason Evans <jasone@canonware.com>2015-07-24 18:20:48 -0700
commit40cbd30d508b0d4e6462f5c36ffdbf6c1f29da22 (patch)
tree5390c5bcb712213adcf545ca78bfb949ff5a027b
parent87ccb5554769d915338b9a980d36359a5c6ec3fa (diff)
downloadjemalloc-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.c2
-rw-r--r--test/integration/rallocx.c5
2 files changed, 4 insertions, 3 deletions
diff --git a/src/huge.c b/src/huge.c
index d1a9586..a7993f8 100644
--- a/src/huge.c
+++ b/src/huge.c
@@ -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;
}
}