summaryrefslogtreecommitdiffstats
path: root/src/huge.c
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2016-12-04 06:48:43 (GMT)
committerJason Evans <jasone@canonware.com>2016-12-04 06:48:43 (GMT)
commitf1f76357313e7dcad7262f17a48ff0a2e005fcdc (patch)
tree826e5a42621cbd8abc9e7473437f223faccc2b0c /src/huge.c
parent0110fa8451af905affd77c3bea0d545fee2251b2 (diff)
parent2d1bb8980fff829c58dabbf122224f577879a32c (diff)
downloadjemalloc-4.4.0.zip
jemalloc-4.4.0.tar.gz
jemalloc-4.4.0.tar.bz2
Merge branch 'rc-4.4.0'4.4.0
Diffstat (limited to 'src/huge.c')
-rw-r--r--src/huge.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/huge.c b/src/huge.c
index 62e6932..8abd8c0 100644
--- a/src/huge.c
+++ b/src/huge.c
@@ -56,6 +56,7 @@ huge_palloc(tsdn_t *tsdn, arena_t *arena, size_t usize, size_t alignment,
size_t ausize;
arena_t *iarena;
extent_node_t *node;
+ size_t sn;
bool is_zeroed;
/* Allocate one or more contiguous chunks for this request. */
@@ -68,7 +69,8 @@ huge_palloc(tsdn_t *tsdn, arena_t *arena, size_t usize, size_t alignment,
assert(ausize >= chunksize);
/* Allocate an extent node with which to track the chunk. */
- iarena = (!tsdn_null(tsdn)) ? arena_ichoose(tsdn_tsd(tsdn), NULL) : a0get();
+ iarena = (!tsdn_null(tsdn)) ? arena_ichoose(tsdn_tsd(tsdn), NULL) :
+ a0get();
node = ipallocztm(tsdn, CACHELINE_CEILING(sizeof(extent_node_t)),
CACHELINE, false, NULL, true, iarena);
if (node == NULL)
@@ -82,15 +84,15 @@ huge_palloc(tsdn_t *tsdn, arena_t *arena, size_t usize, size_t alignment,
if (likely(!tsdn_null(tsdn)))
arena = arena_choose(tsdn_tsd(tsdn), arena);
if (unlikely(arena == NULL) || (ret = arena_chunk_alloc_huge(tsdn,
- arena, usize, alignment, &is_zeroed)) == NULL) {
+ arena, usize, alignment, &sn, &is_zeroed)) == NULL) {
idalloctm(tsdn, node, NULL, true, true);
return (NULL);
}
- extent_node_init(node, arena, ret, usize, is_zeroed, true);
+ extent_node_init(node, arena, ret, usize, sn, is_zeroed, true);
if (huge_node_set(tsdn, ret, node)) {
- arena_chunk_dalloc_huge(tsdn, arena, ret, usize);
+ arena_chunk_dalloc_huge(tsdn, arena, ret, usize, sn);
idalloctm(tsdn, node, NULL, true, true);
return (NULL);
}
@@ -245,7 +247,8 @@ huge_ralloc_no_move_shrink(tsdn_t *tsdn, void *ptr, size_t oldsize,
malloc_mutex_unlock(tsdn, &arena->huge_mtx);
/* Zap the excess chunks. */
- arena_chunk_ralloc_huge_shrink(tsdn, arena, ptr, oldsize, usize);
+ arena_chunk_ralloc_huge_shrink(tsdn, arena, ptr, oldsize, usize,
+ extent_node_sn_get(node));
return (false);
}
@@ -407,7 +410,8 @@ huge_dalloc(tsdn_t *tsdn, void *ptr)
huge_dalloc_junk(extent_node_addr_get(node),
extent_node_size_get(node));
arena_chunk_dalloc_huge(tsdn, extent_node_arena_get(node),
- extent_node_addr_get(node), extent_node_size_get(node));
+ extent_node_addr_get(node), extent_node_size_get(node),
+ extent_node_sn_get(node));
idalloctm(tsdn, node, NULL, true, true);
arena_decay_tick(tsdn, arena);