diff --git a/include/jemalloc/internal/pa.h b/include/jemalloc/internal/pa.h index ff5924c1..db04aa0e 100644 --- a/include/jemalloc/internal/pa.h +++ b/include/jemalloc/internal/pa.h @@ -144,5 +144,7 @@ void pa_dalloc(tsdn_t *tsdn, pa_shard_t *shard, edata_t *edata, void pa_decay_to_limit(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay, pa_shard_decay_stats_t *decay_stats, ecache_t *ecache, bool fully_decay, size_t npages_limit, size_t npages_decay_max); +void pa_decay_all(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay, + pa_shard_decay_stats_t *decay_stats, ecache_t *ecache, bool fully_decay); #endif /* JEMALLOC_INTERNAL_PA_H */ diff --git a/src/arena.c b/src/arena.c index dddb0830..7c65c5c5 100644 --- a/src/arena.c +++ b/src/arena.c @@ -612,12 +612,8 @@ arena_decay_impl(tsdn_t *tsdn, arena_t *arena, decay_t *decay, pa_shard_decay_stats_t *decay_stats, ecache_t *ecache, bool is_background_thread, bool all) { if (all) { - assert(!is_background_thread); - malloc_mutex_lock(tsdn, &decay->mtx); - pa_decay_to_limit(tsdn, &arena->pa_shard, decay, decay_stats, - ecache, /* fully_decay */ all, 0, - ecache_npages_get(ecache)); - malloc_mutex_unlock(tsdn, &decay->mtx); + pa_decay_all(tsdn, &arena->pa_shard, decay, decay_stats, ecache, + /* fully_decay */ all); /* * The previous pa_decay_to_limit call may not have actually * decayed all pages, if new pages were added concurrently with @@ -630,9 +626,9 @@ arena_decay_impl(tsdn_t *tsdn, arena_t *arena, decay_t *decay, * an extra redundant check minimizes the change. We should * reevaluate. */ + assert(!is_background_thread); arena_background_thread_inactivity_check(tsdn, arena, /* is_background_thread */ false); - return false; } diff --git a/src/pa.c b/src/pa.c index 7a84cb03..711b8243 100644 --- a/src/pa.c +++ b/src/pa.c @@ -287,3 +287,12 @@ pa_decay_to_limit(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay, malloc_mutex_lock(tsdn, &decay->mtx); decay->purging = false; } + +void +pa_decay_all(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay, + pa_shard_decay_stats_t *decay_stats, ecache_t *ecache, bool fully_decay) { + malloc_mutex_lock(tsdn, &decay->mtx); + pa_decay_to_limit(tsdn, shard, decay, decay_stats, ecache, + fully_decay, 0, ecache_npages_get(ecache)); + malloc_mutex_unlock(tsdn, &decay->mtx); +}