extent_may_dalloc -> ehooks_dalloc_will_fail

This commit is contained in:
David Goldblatt 2019-12-11 13:35:43 -08:00 committed by David Goldblatt
parent 7859184179
commit 09475bf8ac
2 changed files with 11 additions and 7 deletions

View File

@ -9,6 +9,7 @@
*/
#include "jemalloc/internal/atomic.h"
#include "jemalloc/internal/extent_mmap.h"
extern const extent_hooks_t ehooks_default_extent_hooks;
@ -96,6 +97,15 @@ ehooks_are_default(ehooks_t *ehooks) {
* a hook. If that hook is doomed to fail, this is wasteful. We therefore
* include some checks for such cases.
*/
static inline bool
ehooks_dalloc_will_fail(ehooks_t *ehooks) {
if (ehooks_are_default(ehooks)) {
return opt_retain;
} else {
return ehooks_get_extent_hooks_ptr(ehooks)->dalloc == NULL;
}
}
static inline bool
ehooks_split_will_fail(ehooks_t *ehooks) {
return ehooks_get_extent_hooks_ptr(ehooks)->split == NULL;

View File

@ -1243,12 +1243,6 @@ extent_dalloc_gap(tsdn_t *tsdn, arena_t *arena, edata_t *edata) {
extent_dalloc_wrapper(tsdn, arena, ehooks, edata);
}
static bool
extent_may_dalloc(void) {
/* With retain enabled, the default dalloc always fails. */
return !opt_retain;
}
static bool
extent_dalloc_wrapper_try(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
edata_t *edata) {
@ -1281,7 +1275,7 @@ extent_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
WITNESS_RANK_CORE, 0);
/* Avoid calling the default extent_dalloc unless have to. */
if (!ehooks_are_default(ehooks) || extent_may_dalloc()) {
if (!ehooks_dalloc_will_fail(ehooks)) {
/*
* Deregister first to avoid a race with other allocating
* threads, and reregister if deallocation fails.