Take background thread lock when setting extent hooks.
This commit is contained in:
parent
530c07a45b
commit
3a813946fb
@ -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);
|
||||||
|
@ -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 {
|
||||||
|
14
src/extent.c
14
src/extent.c
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user