Extent: Break [de]activation's arena dependence.
This commit is contained in:
parent
576d7047ab
commit
282a382326
@ -330,9 +330,8 @@ extents_abandon_vm(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
extent_deactivate_locked(tsdn_t *tsdn, arena_t *arena, ecache_t *ecache,
|
extent_deactivate_locked(tsdn_t *tsdn, ecache_t *ecache, edata_t *edata) {
|
||||||
edata_t *edata) {
|
assert(edata_arena_ind_get(edata) == ecache_ind_get(ecache));
|
||||||
assert(edata_arena_ind_get(edata) == arena_ind_get(arena));
|
|
||||||
assert(edata_state_get(edata) == extent_state_active);
|
assert(edata_state_get(edata) == extent_state_active);
|
||||||
|
|
||||||
edata_state_set(edata, ecache->state);
|
edata_state_set(edata, ecache->state);
|
||||||
@ -340,17 +339,15 @@ extent_deactivate_locked(tsdn_t *tsdn, arena_t *arena, ecache_t *ecache,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
extent_deactivate(tsdn_t *tsdn, arena_t *arena, ecache_t *ecache,
|
extent_deactivate(tsdn_t *tsdn, ecache_t *ecache, edata_t *edata) {
|
||||||
edata_t *edata) {
|
|
||||||
malloc_mutex_lock(tsdn, &ecache->mtx);
|
malloc_mutex_lock(tsdn, &ecache->mtx);
|
||||||
extent_deactivate_locked(tsdn, arena, ecache, edata);
|
extent_deactivate_locked(tsdn, ecache, edata);
|
||||||
malloc_mutex_unlock(tsdn, &ecache->mtx);
|
malloc_mutex_unlock(tsdn, &ecache->mtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
extent_activate_locked(tsdn_t *tsdn, arena_t *arena, ecache_t *ecache,
|
extent_activate_locked(tsdn_t *tsdn, ecache_t *ecache, edata_t *edata) {
|
||||||
edata_t *edata) {
|
assert(edata_arena_ind_get(edata) == ecache_ind_get(ecache));
|
||||||
assert(edata_arena_ind_get(edata) == arena_ind_get(arena));
|
|
||||||
assert(edata_state_get(edata) == ecache->state);
|
assert(edata_state_get(edata) == ecache->state);
|
||||||
|
|
||||||
eset_remove(&ecache->eset, edata);
|
eset_remove(&ecache->eset, edata);
|
||||||
@ -603,7 +600,7 @@ extent_recycle_extract(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
extent_activate_locked(tsdn, arena, ecache, edata);
|
extent_activate_locked(tsdn, ecache, edata);
|
||||||
malloc_mutex_unlock(tsdn, &ecache->mtx);
|
malloc_mutex_unlock(tsdn, &ecache->mtx);
|
||||||
|
|
||||||
return edata;
|
return edata;
|
||||||
@ -733,16 +730,16 @@ extent_recycle_split(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
|||||||
* leaking the extent.
|
* leaking the extent.
|
||||||
*/
|
*/
|
||||||
assert(to_leak != NULL && lead == NULL && trail == NULL);
|
assert(to_leak != NULL && lead == NULL && trail == NULL);
|
||||||
extent_deactivate(tsdn, arena, ecache, to_leak);
|
extent_deactivate(tsdn, ecache, to_leak);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == extent_split_interior_ok) {
|
if (result == extent_split_interior_ok) {
|
||||||
if (lead != NULL) {
|
if (lead != NULL) {
|
||||||
extent_deactivate(tsdn, arena, ecache, lead);
|
extent_deactivate(tsdn, ecache, lead);
|
||||||
}
|
}
|
||||||
if (trail != NULL) {
|
if (trail != NULL) {
|
||||||
extent_deactivate(tsdn, arena, ecache, trail);
|
extent_deactivate(tsdn, ecache, trail);
|
||||||
}
|
}
|
||||||
return edata;
|
return edata;
|
||||||
} else {
|
} else {
|
||||||
@ -1086,7 +1083,7 @@ extent_coalesce(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
|||||||
bool growing_retained) {
|
bool growing_retained) {
|
||||||
assert(extent_can_coalesce(ecache, inner, outer));
|
assert(extent_can_coalesce(ecache, inner, outer));
|
||||||
|
|
||||||
extent_activate_locked(tsdn, arena, ecache, outer);
|
extent_activate_locked(tsdn, ecache, outer);
|
||||||
|
|
||||||
malloc_mutex_unlock(tsdn, &ecache->mtx);
|
malloc_mutex_unlock(tsdn, &ecache->mtx);
|
||||||
bool err = extent_merge_impl(tsdn, ehooks, &arena->edata_cache,
|
bool err = extent_merge_impl(tsdn, ehooks, &arena->edata_cache,
|
||||||
@ -1094,7 +1091,7 @@ extent_coalesce(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
|||||||
malloc_mutex_lock(tsdn, &ecache->mtx);
|
malloc_mutex_lock(tsdn, &ecache->mtx);
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
extent_deactivate_locked(tsdn, arena, ecache, outer);
|
extent_deactivate_locked(tsdn, ecache, outer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
@ -1232,7 +1229,7 @@ extent_record(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks, ecache_t *ecache,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
extent_deactivate_locked(tsdn, arena, ecache, edata);
|
extent_deactivate_locked(tsdn, ecache, edata);
|
||||||
|
|
||||||
malloc_mutex_unlock(tsdn, &ecache->mtx);
|
malloc_mutex_unlock(tsdn, &ecache->mtx);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user