diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | malloc/arena.c | 10 |
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. */ |