File malloc-Consistently-apply-trim_threshold-to-all-heap.patch of Package glibc
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.
Index: glibc-2.22/malloc/arena.c
===================================================================
--- glibc-2.22.orig/malloc/arena.c
+++ glibc-2.22/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. */