extent_may_dalloc -> ehooks_dalloc_will_fail
This commit is contained in:
parent
7859184179
commit
09475bf8ac
@ -9,6 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "jemalloc/internal/atomic.h"
|
#include "jemalloc/internal/atomic.h"
|
||||||
|
#include "jemalloc/internal/extent_mmap.h"
|
||||||
|
|
||||||
extern const extent_hooks_t ehooks_default_extent_hooks;
|
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
|
* a hook. If that hook is doomed to fail, this is wasteful. We therefore
|
||||||
* include some checks for such cases.
|
* 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
|
static inline bool
|
||||||
ehooks_split_will_fail(ehooks_t *ehooks) {
|
ehooks_split_will_fail(ehooks_t *ehooks) {
|
||||||
return ehooks_get_extent_hooks_ptr(ehooks)->split == NULL;
|
return ehooks_get_extent_hooks_ptr(ehooks)->split == NULL;
|
||||||
|
@ -1243,12 +1243,6 @@ extent_dalloc_gap(tsdn_t *tsdn, arena_t *arena, edata_t *edata) {
|
|||||||
extent_dalloc_wrapper(tsdn, arena, ehooks, 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
|
static bool
|
||||||
extent_dalloc_wrapper_try(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
extent_dalloc_wrapper_try(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||||
edata_t *edata) {
|
edata_t *edata) {
|
||||||
@ -1281,7 +1275,7 @@ extent_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
|||||||
WITNESS_RANK_CORE, 0);
|
WITNESS_RANK_CORE, 0);
|
||||||
|
|
||||||
/* Avoid calling the default extent_dalloc unless have to. */
|
/* 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
|
* Deregister first to avoid a race with other allocating
|
||||||
* threads, and reregister if deallocation fails.
|
* threads, and reregister if deallocation fails.
|
||||||
|
Loading…
Reference in New Issue
Block a user