From 56e0031d7d0c69c54de4bae1ca3a2fd2823f69ff Mon Sep 17 00:00:00 2001 From: Jason Evans Date: Tue, 17 May 2016 18:17:04 -0700 Subject: [PATCH] Add/use chunk_decommit_wrapper(). --- include/jemalloc/internal/chunk.h | 3 +++ include/jemalloc/internal/private_symbols.txt | 1 + src/arena.c | 14 +++++++------- src/chunk.c | 9 +++++++++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/include/jemalloc/internal/chunk.h b/include/jemalloc/internal/chunk.h index ab102d2c..8cd992d1 100644 --- a/include/jemalloc/internal/chunk.h +++ b/include/jemalloc/internal/chunk.h @@ -66,6 +66,9 @@ void chunk_dalloc_cache(tsdn_t *tsdn, arena_t *arena, void chunk_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks, void *chunk, size_t size, bool zeroed, bool committed); +bool chunk_decommit_wrapper(tsdn_t *tsdn, arena_t *arena, + chunk_hooks_t *chunk_hooks, void *chunk, size_t size, size_t offset, + size_t length); bool chunk_purge_wrapper(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks, void *chunk, size_t size, size_t offset, size_t length); diff --git a/include/jemalloc/internal/private_symbols.txt b/include/jemalloc/internal/private_symbols.txt index c237ab33..5261e02c 100644 --- a/include/jemalloc/internal/private_symbols.txt +++ b/include/jemalloc/internal/private_symbols.txt @@ -162,6 +162,7 @@ chunk_boot chunk_dalloc_cache chunk_dalloc_mmap chunk_dalloc_wrapper +chunk_decommit_wrapper chunk_deregister chunk_dss_boot chunk_dss_postfork_child diff --git a/src/arena.c b/src/arena.c index 720219d3..ee651947 100644 --- a/src/arena.c +++ b/src/arena.c @@ -552,8 +552,8 @@ arena_chunk_alloc_internal_hard(tsdn_t *tsdn, arena_t *arena, if (chunk != NULL && arena_chunk_register(tsdn, arena, chunk, *zero)) { if (!*commit) { /* Undo commit of header. */ - chunk_hooks->decommit(chunk, chunksize, 0, map_bias << - LG_PAGE, arena->ind); + chunk_decommit_wrapper(tsdn, arena, chunk_hooks, + chunk, chunksize, 0, map_bias << LG_PAGE); } chunk_dalloc_wrapper(tsdn, arena, chunk_hooks, (void *)chunk, chunksize, *zero, *commit); @@ -675,9 +675,8 @@ arena_chunk_discard(tsdn_t *tsdn, arena_t *arena, arena_chunk_t *chunk) * chunk as committed has a high potential for causing later * access of decommitted memory. */ - chunk_hooks = chunk_hooks_get(tsdn, arena); - chunk_hooks.decommit(chunk, chunksize, 0, map_bias << LG_PAGE, - arena->ind); + chunk_decommit_wrapper(tsdn, arena, &chunk_hooks, chunk, + chunksize, 0, map_bias << LG_PAGE); } chunk_dalloc_cache(tsdn, arena, &chunk_hooks, (void *)chunk, chunksize, @@ -1603,8 +1602,9 @@ arena_purge_stashed(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks, assert(!arena_mapbits_decommitted_get(chunk, pageind)); assert(!arena_mapbits_decommitted_get(chunk, pageind+npages-1)); - decommitted = !chunk_hooks->decommit(chunk, chunksize, - pageind << LG_PAGE, npages << LG_PAGE, arena->ind); + decommitted = !chunk_decommit_wrapper(tsdn, arena, + chunk_hooks, chunk, chunksize, pageind << LG_PAGE, + npages << LG_PAGE); if (decommitted) { flag_unzeroed = 0; flags = CHUNK_MAP_DECOMMITTED; diff --git a/src/chunk.c b/src/chunk.c index a32eede9..0d942d66 100644 --- a/src/chunk.c +++ b/src/chunk.c @@ -752,6 +752,15 @@ chunk_decommit_default(void *chunk, size_t size, size_t offset, size_t length, length)); } +bool +chunk_decommit_wrapper(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks, + void *chunk, size_t size, size_t offset, size_t length) +{ + + chunk_hooks_assure_initialized(tsdn, arena, chunk_hooks); + return (chunk_hooks->decommit(chunk, size, offset, length, arena->ind)); +} + static bool chunk_purge_default(void *chunk, size_t size, size_t offset, size_t length, unsigned arena_ind)