aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--malloc/arena.c10
2 files changed, 14 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 7297ecc994..85bfbd20c0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-07 Carlos O'Donell <carlos@redhat.com>
+
+ [BZ #17195]
+ * malloc/arena.c (heap_trim): Apply trim_treshold to top_chunck size,
+ as is similarly done in systrim and _int_free already.
+
2015-10-08 Samuel Thibault <samuel.thibault@ens-lyon.org>
* sysdeps/mach/configure.ac (mach_interface_list): Add task_notify.
diff --git a/malloc/arena.c b/malloc/arena.c
index b44e307ade..cb45a048cd 100644
--- a/malloc/arena.c
+++ b/malloc/arena.c
@@ -696,14 +696,20 @@ heap_trim (heap_info *heap, size_t pad)
}
/* Uses similar logic for per-thread arenas as the main arena with systrim
- by preserving the top pad and at least a page. */
+ and _int_free by preserving the top pad and rounding down to the nearest
+ page. */
top_size = chunksize (top_chunk);
+ if ((unsigned long)(top_size) <
+ (unsigned long)(mp_.trim_threshold))
+ return 0;
+
top_area = top_size - MINSIZE - 1;
if (top_area < 0 || (size_t) top_area <= pad)
return 0;
+ /* Release in pagesize units and round down to the nearest page. */
extra = ALIGN_DOWN(top_area - pad, pagesz);
- if ((unsigned long) extra < mp_.trim_threshold)
+ if (extra == 0)
return 0;
/* Try to shrink. */