Move arena_t's purging field into arena_decay_t.

This commit is contained in:
Jason Evans 2017-03-07 19:52:57 -08:00
parent 765edd67b4
commit 38a5bfc816
2 changed files with 9 additions and 12 deletions

View File

@ -39,6 +39,11 @@ struct arena_bin_info_s {
struct arena_decay_s { struct arena_decay_s {
/* Synchronizes all non-atomic fields. */ /* Synchronizes all non-atomic fields. */
malloc_mutex_t mtx; malloc_mutex_t mtx;
/*
* True if a thread is currently purging the extents associated with
* this decay structure.
*/
bool purging;
/* /*
* Approximate time in seconds from the creation of a set of unused * Approximate time in seconds from the creation of a set of unused
* dirty pages until an equivalent set of unused dirty pages is purged * dirty pages until an equivalent set of unused dirty pages is purged
@ -199,13 +204,6 @@ struct arena_s {
*/ */
arena_decay_t decay; arena_decay_t decay;
/*
* True if a thread is currently executing arena_purge_to_limit().
*
* Synchronization: decay.mtx.
*/
bool purging;
/* /*
* Next extent size class in a growing series to use when satisfying a * Next extent size class in a growing series to use when satisfying a
* request via the extent hooks (only if !config_munmap). This limits * request via the extent hooks (only if !config_munmap). This limits

View File

@ -663,6 +663,7 @@ arena_decay_init(arena_decay_t *decay, extents_t *extents, ssize_t decay_time) {
if (malloc_mutex_init(&decay->mtx, "decay", WITNESS_RANK_DECAY)) { if (malloc_mutex_init(&decay->mtx, "decay", WITNESS_RANK_DECAY)) {
return true; return true;
} }
decay->purging = false;
arena_decay_reinit(decay, extents, decay_time); arena_decay_reinit(decay, extents, decay_time);
return false; return false;
} }
@ -812,10 +813,10 @@ arena_purge_to_limit(tsdn_t *tsdn, arena_t *arena, arena_decay_t *decay,
witness_assert_depth_to_rank(tsdn, WITNESS_RANK_CORE, 1); witness_assert_depth_to_rank(tsdn, WITNESS_RANK_CORE, 1);
malloc_mutex_assert_owner(tsdn, &decay->mtx); malloc_mutex_assert_owner(tsdn, &decay->mtx);
if (arena->purging) { if (decay->purging) {
return; return;
} }
arena->purging = true; decay->purging = true;
extent_hooks_t *extent_hooks = extent_hooks_get(arena); extent_hooks_t *extent_hooks = extent_hooks_get(arena);
size_t npurge, npurged; size_t npurge, npurged;
@ -845,7 +846,7 @@ arena_purge_to_limit(tsdn_t *tsdn, arena_t *arena, arena_decay_t *decay,
} }
label_return: label_return:
arena->purging = false; decay->purging = false;
} }
void void
@ -1747,8 +1748,6 @@ arena_new(tsdn_t *tsdn, unsigned ind, extent_hooks_t *extent_hooks) {
goto label_error; goto label_error;
} }
arena->purging = false;
if (!config_munmap) { if (!config_munmap) {
arena->extent_grow_next = psz2ind(HUGEPAGE); arena->extent_grow_next = psz2ind(HUGEPAGE);
} }