Ehooks: remove arena_ind parameter.
This lives within the ehooks_t now, so that callers don't need to know it.
This commit is contained in:
parent
57fe99d4be
commit
9cad5639ff
@ -172,17 +172,17 @@ ehooks_debug_zero_check(void *addr, size_t size) {
|
||||
|
||||
static inline void *
|
||||
ehooks_alloc(tsdn_t *tsdn, ehooks_t *ehooks, void *new_addr, size_t size,
|
||||
size_t alignment, bool *zero, bool *commit, unsigned arena_ind) {
|
||||
size_t alignment, bool *zero, bool *commit) {
|
||||
bool orig_zero = *zero;
|
||||
void *ret;
|
||||
extent_hooks_t *extent_hooks = ehooks_get_extent_hooks_ptr(ehooks);
|
||||
if (extent_hooks == &ehooks_default_extent_hooks) {
|
||||
ret = ehooks_default_alloc_impl(tsdn, new_addr, size,
|
||||
alignment, zero, commit, arena_ind);
|
||||
alignment, zero, commit, ehooks_ind_get(ehooks));
|
||||
} else {
|
||||
ehooks_pre_reentrancy(tsdn);
|
||||
ret = extent_hooks->alloc(extent_hooks, new_addr, size,
|
||||
alignment, zero, commit, arena_ind);
|
||||
alignment, zero, commit, ehooks_ind_get(ehooks));
|
||||
ehooks_post_reentrancy(tsdn);
|
||||
}
|
||||
assert(new_addr == NULL || ret == NULL || new_addr == ret);
|
||||
@ -195,7 +195,7 @@ ehooks_alloc(tsdn_t *tsdn, ehooks_t *ehooks, void *new_addr, size_t size,
|
||||
|
||||
static inline bool
|
||||
ehooks_dalloc(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
bool committed, unsigned arena_ind) {
|
||||
bool committed) {
|
||||
extent_hooks_t *extent_hooks = ehooks_get_extent_hooks_ptr(ehooks);
|
||||
if (extent_hooks == &ehooks_default_extent_hooks) {
|
||||
return ehooks_default_dalloc_impl(addr, size);
|
||||
@ -204,7 +204,7 @@ ehooks_dalloc(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
} else {
|
||||
ehooks_pre_reentrancy(tsdn);
|
||||
bool err = extent_hooks->dalloc(extent_hooks, addr, size,
|
||||
committed, arena_ind);
|
||||
committed, ehooks_ind_get(ehooks));
|
||||
ehooks_post_reentrancy(tsdn);
|
||||
return err;
|
||||
}
|
||||
@ -212,7 +212,7 @@ ehooks_dalloc(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
|
||||
static inline void
|
||||
ehooks_destroy(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
bool committed, unsigned arena_ind) {
|
||||
bool committed) {
|
||||
extent_hooks_t *extent_hooks = ehooks_get_extent_hooks_ptr(ehooks);
|
||||
if (extent_hooks == &ehooks_default_extent_hooks) {
|
||||
return ehooks_default_destroy_impl(addr, size);
|
||||
@ -221,14 +221,14 @@ ehooks_destroy(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
} else {
|
||||
ehooks_pre_reentrancy(tsdn);
|
||||
extent_hooks->destroy(extent_hooks, addr, size, committed,
|
||||
arena_ind);
|
||||
ehooks_ind_get(ehooks));
|
||||
ehooks_post_reentrancy(tsdn);
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool
|
||||
ehooks_commit(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
size_t offset, size_t length, unsigned arena_ind) {
|
||||
size_t offset, size_t length) {
|
||||
extent_hooks_t *extent_hooks = ehooks_get_extent_hooks_ptr(ehooks);
|
||||
bool err;
|
||||
if (extent_hooks == &ehooks_default_extent_hooks) {
|
||||
@ -238,7 +238,7 @@ ehooks_commit(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
} else {
|
||||
ehooks_pre_reentrancy(tsdn);
|
||||
err = extent_hooks->commit(extent_hooks, addr, size,
|
||||
offset, length, arena_ind);
|
||||
offset, length, ehooks_ind_get(ehooks));
|
||||
ehooks_post_reentrancy(tsdn);
|
||||
}
|
||||
if (!err) {
|
||||
@ -249,7 +249,7 @@ ehooks_commit(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
|
||||
static inline bool
|
||||
ehooks_decommit(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
size_t offset, size_t length, unsigned arena_ind) {
|
||||
size_t offset, size_t length) {
|
||||
extent_hooks_t *extent_hooks = ehooks_get_extent_hooks_ptr(ehooks);
|
||||
if (extent_hooks == &ehooks_default_extent_hooks) {
|
||||
return ehooks_default_decommit_impl(addr, offset, length);
|
||||
@ -258,7 +258,7 @@ ehooks_decommit(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
} else {
|
||||
ehooks_pre_reentrancy(tsdn);
|
||||
bool err = extent_hooks->decommit(extent_hooks, addr, size,
|
||||
offset, length, arena_ind);
|
||||
offset, length, ehooks_ind_get(ehooks));
|
||||
ehooks_post_reentrancy(tsdn);
|
||||
return err;
|
||||
}
|
||||
@ -266,7 +266,7 @@ ehooks_decommit(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
|
||||
static inline bool
|
||||
ehooks_purge_lazy(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
size_t offset, size_t length, unsigned arena_ind) {
|
||||
size_t offset, size_t length) {
|
||||
extent_hooks_t *extent_hooks = ehooks_get_extent_hooks_ptr(ehooks);
|
||||
#ifdef PAGES_CAN_PURGE_LAZY
|
||||
if (extent_hooks == &ehooks_default_extent_hooks) {
|
||||
@ -278,7 +278,7 @@ ehooks_purge_lazy(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
} else {
|
||||
ehooks_pre_reentrancy(tsdn);
|
||||
bool err = extent_hooks->purge_lazy(extent_hooks, addr, size,
|
||||
offset, length, arena_ind);
|
||||
offset, length, ehooks_ind_get(ehooks));
|
||||
ehooks_post_reentrancy(tsdn);
|
||||
return err;
|
||||
}
|
||||
@ -286,7 +286,7 @@ ehooks_purge_lazy(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
|
||||
static inline bool
|
||||
ehooks_purge_forced(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
size_t offset, size_t length, unsigned arena_ind) {
|
||||
size_t offset, size_t length) {
|
||||
extent_hooks_t *extent_hooks = ehooks_get_extent_hooks_ptr(ehooks);
|
||||
/*
|
||||
* It would be correct to have a ehooks_debug_zero_check call at the end
|
||||
@ -306,7 +306,7 @@ ehooks_purge_forced(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
} else {
|
||||
ehooks_pre_reentrancy(tsdn);
|
||||
bool err = extent_hooks->purge_forced(extent_hooks, addr, size,
|
||||
offset, length, arena_ind);
|
||||
offset, length, ehooks_ind_get(ehooks));
|
||||
ehooks_post_reentrancy(tsdn);
|
||||
return err;
|
||||
}
|
||||
@ -314,7 +314,7 @@ ehooks_purge_forced(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
|
||||
static inline bool
|
||||
ehooks_split(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
size_t size_a, size_t size_b, bool committed, unsigned arena_ind) {
|
||||
size_t size_a, size_t size_b, bool committed) {
|
||||
extent_hooks_t *extent_hooks = ehooks_get_extent_hooks_ptr(ehooks);
|
||||
if (ehooks_are_default(ehooks)) {
|
||||
return ehooks_default_split_impl();
|
||||
@ -323,7 +323,7 @@ ehooks_split(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
} else {
|
||||
ehooks_pre_reentrancy(tsdn);
|
||||
bool err = extent_hooks->split(extent_hooks, addr, size, size_a,
|
||||
size_b, committed, arena_ind);
|
||||
size_b, committed, ehooks_ind_get(ehooks));
|
||||
ehooks_post_reentrancy(tsdn);
|
||||
return err;
|
||||
}
|
||||
@ -331,8 +331,7 @@ ehooks_split(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
|
||||
static inline bool
|
||||
ehooks_merge(tsdn_t *tsdn, ehooks_t *ehooks, void *addr_a, size_t size_a,
|
||||
bool head_a, void *addr_b, size_t size_b, bool head_b, bool committed,
|
||||
unsigned arena_ind) {
|
||||
bool head_a, void *addr_b, size_t size_b, bool head_b, bool committed) {
|
||||
extent_hooks_t *extent_hooks = ehooks_get_extent_hooks_ptr(ehooks);
|
||||
if (extent_hooks == &ehooks_default_extent_hooks) {
|
||||
return ehooks_default_merge_impl(tsdn, addr_a, head_a, addr_b,
|
||||
@ -342,15 +341,14 @@ ehooks_merge(tsdn_t *tsdn, ehooks_t *ehooks, void *addr_a, size_t size_a,
|
||||
} else {
|
||||
ehooks_pre_reentrancy(tsdn);
|
||||
bool err = extent_hooks->merge(extent_hooks, addr_a, size_a,
|
||||
addr_b, size_b, committed, arena_ind);
|
||||
addr_b, size_b, committed, ehooks_ind_get(ehooks));
|
||||
ehooks_post_reentrancy(tsdn);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
ehooks_zero(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size,
|
||||
unsigned arena_ind) {
|
||||
ehooks_zero(tsdn_t *tsdn, ehooks_t *ehooks, void *addr, size_t size) {
|
||||
extent_hooks_t *extent_hooks = ehooks_get_extent_hooks_ptr(ehooks);
|
||||
if (extent_hooks == &ehooks_default_extent_hooks) {
|
||||
ehooks_default_zero_impl(addr, size);
|
||||
|
12
src/base.c
12
src/base.c
@ -44,7 +44,7 @@ base_map(tsdn_t *tsdn, ehooks_t *ehooks, unsigned ind, size_t size) {
|
||||
}
|
||||
} else {
|
||||
addr = ehooks_alloc(tsdn, ehooks, NULL, size, alignment, &zero,
|
||||
&commit, ind);
|
||||
&commit);
|
||||
}
|
||||
|
||||
return addr;
|
||||
@ -79,18 +79,16 @@ base_unmap(tsdn_t *tsdn, ehooks_t *ehooks, unsigned ind, void *addr,
|
||||
/* Nothing worked. This should never happen. */
|
||||
not_reached();
|
||||
} else {
|
||||
if (!ehooks_dalloc(tsdn, ehooks, addr, size, true, ind)) {
|
||||
if (!ehooks_dalloc(tsdn, ehooks, addr, size, true)) {
|
||||
goto label_done;
|
||||
}
|
||||
if (!ehooks_decommit(tsdn, ehooks, addr, size, 0, size, ind)) {
|
||||
if (!ehooks_decommit(tsdn, ehooks, addr, size, 0, size)) {
|
||||
goto label_done;
|
||||
}
|
||||
if (!ehooks_purge_forced(tsdn, ehooks, addr, size, 0, size,
|
||||
ind)) {
|
||||
if (!ehooks_purge_forced(tsdn, ehooks, addr, size, 0, size)) {
|
||||
goto label_done;
|
||||
}
|
||||
if (!ehooks_purge_lazy(tsdn, ehooks, addr, size, 0, size,
|
||||
ind)) {
|
||||
if (!ehooks_purge_lazy(tsdn, ehooks, addr, size, 0, size)) {
|
||||
goto label_done;
|
||||
}
|
||||
/* Nothing worked. That's the application's problem. */
|
||||
|
@ -827,8 +827,7 @@ extent_recycle(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks, ecache_t *ecache,
|
||||
void *addr = edata_base_get(edata);
|
||||
if (!edata_zeroed_get(edata)) {
|
||||
size_t size = edata_size_get(edata);
|
||||
ehooks_zero(tsdn, ehooks, addr, size,
|
||||
arena_ind_get(arena));
|
||||
ehooks_zero(tsdn, ehooks, addr, size);
|
||||
}
|
||||
}
|
||||
return edata;
|
||||
@ -877,7 +876,7 @@ extent_grow_retained(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
bool committed = false;
|
||||
|
||||
void *ptr = ehooks_alloc(tsdn, ehooks, NULL, alloc_size, PAGE, &zeroed,
|
||||
&committed, arena_ind_get(arena));
|
||||
&committed);
|
||||
|
||||
edata_init(edata, arena_ind_get(arena), ptr, alloc_size, false,
|
||||
SC_NSIZES, arena_extent_sn_next(arena), extent_state_active, zeroed,
|
||||
@ -989,7 +988,7 @@ extent_grow_retained(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
if (*zero && !edata_zeroed_get(edata)) {
|
||||
void *addr = edata_base_get(edata);
|
||||
size_t size = edata_size_get(edata);
|
||||
ehooks_zero(tsdn, ehooks, addr, size, arena_ind_get(arena));
|
||||
ehooks_zero(tsdn, ehooks, addr, size);
|
||||
}
|
||||
|
||||
return edata;
|
||||
@ -1041,7 +1040,7 @@ extent_alloc_wrapper(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
}
|
||||
size_t palignment = ALIGNMENT_CEILING(alignment, PAGE);
|
||||
void *addr = ehooks_alloc(tsdn, ehooks, new_addr, esize, palignment,
|
||||
zero, commit, arena_ind_get(arena));
|
||||
zero, commit);
|
||||
if (addr == NULL) {
|
||||
edata_cache_put(tsdn, &arena->edata_cache, edata);
|
||||
return NULL;
|
||||
@ -1265,8 +1264,7 @@ extent_dalloc_wrapper_try(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
|
||||
/* Try to deallocate. */
|
||||
err = ehooks_dalloc(tsdn, ehooks, edata_base_get(edata),
|
||||
edata_size_get(edata), edata_committed_get(edata),
|
||||
arena_ind_get(arena));
|
||||
edata_size_get(edata), edata_committed_get(edata));
|
||||
|
||||
if (!err) {
|
||||
edata_cache_put(tsdn, &arena->edata_cache, edata);
|
||||
@ -1303,13 +1301,11 @@ extent_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
edata_size_get(edata))) {
|
||||
zeroed = true;
|
||||
} else if (!ehooks_purge_forced(tsdn, ehooks, edata_base_get(edata),
|
||||
edata_size_get(edata), 0, edata_size_get(edata),
|
||||
arena_ind_get(arena))) {
|
||||
edata_size_get(edata), 0, edata_size_get(edata))) {
|
||||
zeroed = true;
|
||||
} else if (edata_state_get(edata) == extent_state_muzzy ||
|
||||
!ehooks_purge_lazy(tsdn, ehooks, edata_base_get(edata),
|
||||
edata_size_get(edata), 0, edata_size_get(edata),
|
||||
arena_ind_get(arena))) {
|
||||
edata_size_get(edata), 0, edata_size_get(edata))) {
|
||||
zeroed = false;
|
||||
} else {
|
||||
zeroed = false;
|
||||
@ -1339,8 +1335,7 @@ extent_destroy_wrapper(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
|
||||
/* Try to destroy; silently fail otherwise. */
|
||||
ehooks_destroy(tsdn, ehooks, edata_base_get(edata),
|
||||
edata_size_get(edata), edata_committed_get(edata),
|
||||
arena_ind_get(arena));
|
||||
edata_size_get(edata), edata_committed_get(edata));
|
||||
|
||||
edata_cache_put(tsdn, &arena->edata_cache, edata);
|
||||
}
|
||||
@ -1351,7 +1346,7 @@ extent_commit_impl(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
|
||||
WITNESS_RANK_CORE, growing_retained ? 1 : 0);
|
||||
bool err = ehooks_commit(tsdn, ehooks, edata_base_get(edata),
|
||||
edata_size_get(edata), offset, length, arena_ind_get(arena));
|
||||
edata_size_get(edata), offset, length);
|
||||
edata_committed_set(edata, edata_committed_get(edata) || !err);
|
||||
return err;
|
||||
}
|
||||
@ -1370,7 +1365,7 @@ extent_decommit_wrapper(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
|
||||
WITNESS_RANK_CORE, 0);
|
||||
bool err = ehooks_decommit(tsdn, ehooks, edata_base_get(edata),
|
||||
edata_size_get(edata), offset, length, arena_ind_get(arena));
|
||||
edata_size_get(edata), offset, length);
|
||||
edata_committed_set(edata, edata_committed_get(edata) && err);
|
||||
return err;
|
||||
}
|
||||
@ -1381,7 +1376,7 @@ extent_purge_lazy_impl(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
|
||||
WITNESS_RANK_CORE, growing_retained ? 1 : 0);
|
||||
bool err = ehooks_purge_lazy(tsdn, ehooks, edata_base_get(edata),
|
||||
edata_size_get(edata), offset, length, arena_ind_get(arena));
|
||||
edata_size_get(edata), offset, length);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -1398,7 +1393,7 @@ extent_purge_forced_impl(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn),
|
||||
WITNESS_RANK_CORE, growing_retained ? 1 : 0);
|
||||
bool err = ehooks_purge_forced(tsdn, ehooks, edata_base_get(edata),
|
||||
edata_size_get(edata), offset, length, arena_ind_get(arena));
|
||||
edata_size_get(edata), offset, length);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -1467,8 +1462,7 @@ extent_split_impl(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||
extent_lock_edata2(tsdn, edata, trail);
|
||||
|
||||
bool err = ehooks_split(tsdn, ehooks, edata_base_get(edata),
|
||||
size_a + size_b, size_a, size_b, edata_committed_get(edata),
|
||||
arena_ind_get(arena));
|
||||
size_a + size_b, size_a, size_b, edata_committed_get(edata));
|
||||
|
||||
if (err) {
|
||||
goto label_error_c;
|
||||
@ -1510,8 +1504,7 @@ extent_merge_impl(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks, edata_t *a,
|
||||
|
||||
bool err = ehooks_merge(tsdn, ehooks, edata_base_get(a),
|
||||
edata_size_get(a), edata_is_head_get(a), edata_base_get(b),
|
||||
edata_size_get(b), edata_is_head_get(b), edata_committed_get(a),
|
||||
arena_ind_get(arena));
|
||||
edata_size_get(b), edata_is_head_get(b), edata_committed_get(a));
|
||||
|
||||
if (err) {
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user