Emap: Move extent boundary registration in.
This commit is contained in:
parent
ca21ce4071
commit
d05b61db4a
@ -35,4 +35,12 @@ void emap_rtree_write_acquired(tsdn_t *tsdn, emap_t *emap,
|
|||||||
rtree_leaf_elm_t *elm_a, rtree_leaf_elm_t *elm_b, edata_t *edata,
|
rtree_leaf_elm_t *elm_a, rtree_leaf_elm_t *elm_b, edata_t *edata,
|
||||||
szind_t szind, bool slab);
|
szind_t szind, bool slab);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Associate the given edata with its beginning and end address, setting the
|
||||||
|
* szind and slab info appropriately.
|
||||||
|
* Returns true on error (i.e. resource exhaustion).
|
||||||
|
*/
|
||||||
|
bool emap_register_boundary(tsdn_t *tsdn, emap_t *emap, rtree_ctx_t *rtree_ctx,
|
||||||
|
edata_t *edata, szind_t szind, bool slab);
|
||||||
|
|
||||||
#endif /* JEMALLOC_INTERNAL_EMAP_H */
|
#endif /* JEMALLOC_INTERNAL_EMAP_H */
|
||||||
|
13
src/emap.c
13
src/emap.c
@ -135,3 +135,16 @@ emap_rtree_write_acquired(tsdn_t *tsdn, emap_t *emap, rtree_leaf_elm_t *elm_a,
|
|||||||
slab);
|
slab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
emap_register_boundary(tsdn_t *tsdn, emap_t *emap, rtree_ctx_t *rtree_ctx,
|
||||||
|
edata_t *edata, szind_t szind, bool slab) {
|
||||||
|
rtree_leaf_elm_t *elm_a, *elm_b;
|
||||||
|
bool err = emap_rtree_leaf_elms_lookup(tsdn, emap, rtree_ctx, edata,
|
||||||
|
false, true, &elm_a, &elm_b);
|
||||||
|
if (err) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
emap_rtree_write_acquired(tsdn, emap, elm_a, elm_b, edata, szind, slab);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
12
src/extent.c
12
src/extent.c
@ -324,7 +324,6 @@ static bool
|
|||||||
extent_register_impl(tsdn_t *tsdn, edata_t *edata, bool gdump_add) {
|
extent_register_impl(tsdn_t *tsdn, edata_t *edata, bool gdump_add) {
|
||||||
rtree_ctx_t rtree_ctx_fallback;
|
rtree_ctx_t rtree_ctx_fallback;
|
||||||
rtree_ctx_t *rtree_ctx = tsdn_rtree_ctx(tsdn, &rtree_ctx_fallback);
|
rtree_ctx_t *rtree_ctx = tsdn_rtree_ctx(tsdn, &rtree_ctx_fallback);
|
||||||
rtree_leaf_elm_t *elm_a, *elm_b;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to hold the lock to protect against a concurrent coalesce
|
* We need to hold the lock to protect against a concurrent coalesce
|
||||||
@ -332,16 +331,15 @@ extent_register_impl(tsdn_t *tsdn, edata_t *edata, bool gdump_add) {
|
|||||||
*/
|
*/
|
||||||
emap_lock_edata(tsdn, &emap_global, edata);
|
emap_lock_edata(tsdn, &emap_global, edata);
|
||||||
|
|
||||||
if (emap_rtree_leaf_elms_lookup(tsdn, &emap_global, rtree_ctx, edata,
|
szind_t szind = edata_szind_get_maybe_invalid(edata);
|
||||||
false, true, &elm_a, &elm_b)) {
|
bool slab = edata_slab_get(edata);
|
||||||
|
|
||||||
|
if (emap_register_boundary(tsdn, &emap_global, rtree_ctx, edata, szind,
|
||||||
|
slab)) {
|
||||||
emap_unlock_edata(tsdn, &emap_global, edata);
|
emap_unlock_edata(tsdn, &emap_global, edata);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
szind_t szind = edata_szind_get_maybe_invalid(edata);
|
|
||||||
bool slab = edata_slab_get(edata);
|
|
||||||
emap_rtree_write_acquired(tsdn, &emap_global, elm_a, elm_b, edata,
|
|
||||||
szind, slab);
|
|
||||||
if (slab) {
|
if (slab) {
|
||||||
extent_interior_register(tsdn, rtree_ctx, edata, szind);
|
extent_interior_register(tsdn, rtree_ctx, edata, szind);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user