From 6513d9d923d4e32775612614326ff1889807c840 Mon Sep 17 00:00:00 2001 From: David Goldblatt Date: Thu, 30 Jan 2020 14:55:36 -0800 Subject: [PATCH] Emap: Move over deregistration boundary functions. --- include/jemalloc/internal/emap.h | 3 +++ src/emap.c | 11 +++++++++++ src/extent.c | 8 +------- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/jemalloc/internal/emap.h b/include/jemalloc/internal/emap.h index e8b422e7..eef33f27 100644 --- a/include/jemalloc/internal/emap.h +++ b/include/jemalloc/internal/emap.h @@ -65,4 +65,7 @@ bool emap_register_boundary(tsdn_t *tsdn, emap_t *emap, rtree_ctx_t *rtree_ctx, void emap_register_interior(tsdn_t *tsdn, emap_t *emap, rtree_ctx_t *rtree_ctx, edata_t *edata, szind_t szind); +void emap_deregister_boundary(tsdn_t *tsdn, emap_t *emap, + rtree_ctx_t *rtree_ctx, edata_t *edata); + #endif /* JEMALLOC_INTERNAL_EMAP_H */ diff --git a/src/emap.c b/src/emap.c index 0a37d17e..d54cf7e9 100644 --- a/src/emap.c +++ b/src/emap.c @@ -161,3 +161,14 @@ emap_register_interior(tsdn_t *tsdn, emap_t *emap, rtree_ctx_t *rtree_ctx, LG_PAGE), edata, szind, true); } } + +void +emap_deregister_boundary(tsdn_t *tsdn, emap_t *emap, rtree_ctx_t *rtree_ctx, + edata_t *edata) { + rtree_leaf_elm_t *elm_a, *elm_b; + + emap_rtree_leaf_elms_lookup(tsdn, emap, rtree_ctx, edata, + true, false, &elm_a, &elm_b); + emap_rtree_write_acquired(tsdn, emap, elm_a, elm_b, NULL, SC_NSIZES, + false); +} diff --git a/src/extent.c b/src/extent.c index 9975dd25..2b2ba7ea 100644 --- a/src/extent.c +++ b/src/extent.c @@ -385,19 +385,13 @@ static void extent_deregister_impl(tsdn_t *tsdn, edata_t *edata, bool gdump) { rtree_ctx_t rtree_ctx_fallback; rtree_ctx_t *rtree_ctx = tsdn_rtree_ctx(tsdn, &rtree_ctx_fallback); - rtree_leaf_elm_t *elm_a, *elm_b; - emap_rtree_leaf_elms_lookup(tsdn, &emap_global, rtree_ctx, edata, - true, false, &elm_a, &elm_b); emap_lock_edata(tsdn, &emap_global, edata); - - emap_rtree_write_acquired(tsdn, &emap_global, elm_a, elm_b, NULL, - SC_NSIZES, false); + emap_deregister_boundary(tsdn, &emap_global, rtree_ctx, edata); if (edata_slab_get(edata)) { extent_interior_deregister(tsdn, rtree_ctx, edata); edata_slab_set(edata, false); } - emap_unlock_edata(tsdn, &emap_global, edata); if (config_prof && gdump) {