Take background thread lock when setting extent hooks.

This commit is contained in:
Qi Wang 2017-06-02 16:27:05 -07:00 committed by Qi Wang
parent 530c07a45b
commit 3a813946fb
3 changed files with 15 additions and 4 deletions

View File

@ -15,7 +15,8 @@ extent_t *extent_alloc(tsdn_t *tsdn, arena_t *arena);
void extent_dalloc(tsdn_t *tsdn, arena_t *arena, extent_t *extent); void extent_dalloc(tsdn_t *tsdn, arena_t *arena, extent_t *extent);
extent_hooks_t *extent_hooks_get(arena_t *arena); extent_hooks_t *extent_hooks_get(arena_t *arena);
extent_hooks_t *extent_hooks_set(arena_t *arena, extent_hooks_t *extent_hooks); extent_hooks_t *extent_hooks_set(tsd_t *tsd, arena_t *arena,
extent_hooks_t *extent_hooks);
#ifdef JEMALLOC_JET #ifdef JEMALLOC_JET
size_t extent_size_quantize_floor(size_t size); size_t extent_size_quantize_floor(size_t size);

View File

@ -2154,7 +2154,7 @@ arena_i_extent_hooks_ctl(tsd_t *tsd, const size_t *mib, size_t miblen,
extent_hooks_t *new_extent_hooks extent_hooks_t *new_extent_hooks
JEMALLOC_CC_SILENCE_INIT(NULL); JEMALLOC_CC_SILENCE_INIT(NULL);
WRITE(new_extent_hooks, extent_hooks_t *); WRITE(new_extent_hooks, extent_hooks_t *);
old_extent_hooks = extent_hooks_set(arena, old_extent_hooks = extent_hooks_set(tsd, arena,
new_extent_hooks); new_extent_hooks);
READ(old_extent_hooks, extent_hooks_t *); READ(old_extent_hooks, extent_hooks_t *);
} else { } else {

View File

@ -197,8 +197,18 @@ extent_hooks_get(arena_t *arena) {
} }
extent_hooks_t * extent_hooks_t *
extent_hooks_set(arena_t *arena, extent_hooks_t *extent_hooks) { extent_hooks_set(tsd_t *tsd, arena_t *arena, extent_hooks_t *extent_hooks) {
return base_extent_hooks_set(arena->base, extent_hooks); background_thread_info_t *info;
if (have_background_thread) {
info = arena_background_thread_info_get(arena);
malloc_mutex_lock(tsd_tsdn(tsd), &info->mtx);
}
extent_hooks_t *ret = base_extent_hooks_set(arena->base, extent_hooks);
if (have_background_thread) {
malloc_mutex_unlock(tsd_tsdn(tsd), &info->mtx);
}
return ret;
} }
static void static void