|
Siddhesh Poyarekar |
adbfe47 |
Revert the following fix temporarily:
|
|
Siddhesh Poyarekar |
adbfe47 |
|
|
Siddhesh Poyarekar |
adbfe47 |
commit c26efef9798914e208329c0e8c3c73bb1135d9e3
|
|
Siddhesh Poyarekar |
adbfe47 |
Author: Mel Gorman <mgorman@suse.de>
|
|
Siddhesh Poyarekar |
adbfe47 |
Date: Thu Apr 2 12:14:14 2015 +0530
|
|
Siddhesh Poyarekar |
adbfe47 |
|
|
Siddhesh Poyarekar |
adbfe47 |
malloc: Consistently apply trim_threshold to all heaps [BZ #17195]
|
|
Siddhesh Poyarekar |
adbfe47 |
|
|
Siddhesh Poyarekar |
adbfe47 |
|
|
Siddhesh Poyarekar |
adbfe47 |
because it makes an openjdk bug (#1209451) more prominent, crashing java
|
|
Siddhesh Poyarekar |
adbfe47 |
commands.
|
|
Siddhesh Poyarekar |
adbfe47 |
|
|
Siddhesh Poyarekar |
adbfe47 |
diff --git a/malloc/arena.c b/malloc/arena.c
|
|
Siddhesh Poyarekar |
adbfe47 |
index 8af51f0..d85f371 100644
|
|
Siddhesh Poyarekar |
adbfe47 |
--- a/malloc/arena.c
|
|
Siddhesh Poyarekar |
adbfe47 |
+++ b/malloc/arena.c
|
|
Siddhesh Poyarekar |
adbfe47 |
@@ -658,7 +658,7 @@ heap_trim (heap_info *heap, size_t pad)
|
|
Siddhesh Poyarekar |
adbfe47 |
unsigned long pagesz = GLRO (dl_pagesize);
|
|
Siddhesh Poyarekar |
adbfe47 |
mchunkptr top_chunk = top (ar_ptr), p, bck, fwd;
|
|
Siddhesh Poyarekar |
adbfe47 |
heap_info *prev_heap;
|
|
Siddhesh Poyarekar |
adbfe47 |
- long new_size, top_size, extra, prev_size, misalign;
|
|
Siddhesh Poyarekar |
adbfe47 |
+ long new_size, top_size, top_area, extra, prev_size, misalign;
|
|
Siddhesh Poyarekar |
adbfe47 |
|
|
Siddhesh Poyarekar |
adbfe47 |
/* Can this heap go away completely? */
|
|
Siddhesh Poyarekar |
adbfe47 |
while (top_chunk == chunk_at_offset (heap, sizeof (*heap)))
|
|
Siddhesh Poyarekar |
adbfe47 |
@@ -694,9 +694,16 @@ heap_trim (heap_info *heap, size_t pad)
|
|
Siddhesh Poyarekar |
adbfe47 |
set_head (top_chunk, new_size | PREV_INUSE);
|
|
Siddhesh Poyarekar |
adbfe47 |
/*check_chunk(ar_ptr, top_chunk);*/
|
|
Siddhesh Poyarekar |
adbfe47 |
}
|
|
Siddhesh Poyarekar |
adbfe47 |
+
|
|
Siddhesh Poyarekar |
adbfe47 |
+ /* Uses similar logic for per-thread arenas as the main arena with systrim
|
|
Siddhesh Poyarekar |
adbfe47 |
+ by preserving the top pad and at least a page. */
|
|
Siddhesh Poyarekar |
adbfe47 |
top_size = chunksize (top_chunk);
|
|
Siddhesh Poyarekar |
adbfe47 |
- extra = (top_size - pad - MINSIZE - 1) & ~(pagesz - 1);
|
|
Siddhesh Poyarekar |
adbfe47 |
- if (extra < (long) pagesz)
|
|
Siddhesh Poyarekar |
adbfe47 |
+ top_area = top_size - MINSIZE - 1;
|
|
Siddhesh Poyarekar |
adbfe47 |
+ if (top_area <= pad)
|
|
Siddhesh Poyarekar |
adbfe47 |
+ return 0;
|
|
Siddhesh Poyarekar |
adbfe47 |
+
|
|
Siddhesh Poyarekar |
adbfe47 |
+ extra = ALIGN_DOWN(top_area - pad, pagesz);
|
|
Siddhesh Poyarekar |
adbfe47 |
+ if ((unsigned long) extra < mp_.trim_threshold)
|
|
Siddhesh Poyarekar |
adbfe47 |
return 0;
|
|
Siddhesh Poyarekar |
adbfe47 |
|
|
Siddhesh Poyarekar |
adbfe47 |
/* Try to shrink. */
|