| 778 | } |
| 779 | |
| 780 | static bool |
| 781 | extent_register_impl(tsdn_t *tsdn, extent_t *extent, bool gdump_add) { |
| 782 | rtree_ctx_t rtree_ctx_fallback; |
| 783 | rtree_ctx_t *rtree_ctx = tsdn_rtree_ctx(tsdn, &rtree_ctx_fallback); |
| 784 | rtree_leaf_elm_t *elm_a, *elm_b; |
| 785 | |
| 786 | /* |
| 787 | * We need to hold the lock to protect against a concurrent coalesce |
| 788 | * operation that sees us in a partial state. |
| 789 | */ |
| 790 | extent_lock(tsdn, extent); |
| 791 | |
| 792 | if (extent_rtree_leaf_elms_lookup(tsdn, rtree_ctx, extent, false, true, |
| 793 | &elm_a, &elm_b)) { |
| 794 | extent_unlock(tsdn, extent); |
| 795 | return true; |
| 796 | } |
| 797 | |
| 798 | szind_t szind = extent_szind_get_maybe_invalid(extent); |
| 799 | bool slab = extent_slab_get(extent); |
| 800 | extent_rtree_write_acquired(tsdn, elm_a, elm_b, extent, szind, slab); |
| 801 | if (slab) { |
| 802 | extent_interior_register(tsdn, rtree_ctx, extent, szind); |
| 803 | } |
| 804 | |
| 805 | extent_unlock(tsdn, extent); |
| 806 | |
| 807 | if (config_prof && gdump_add) { |
| 808 | extent_gdump_add(tsdn, extent); |
| 809 | } |
| 810 | |
| 811 | return false; |
| 812 | } |
| 813 | |
| 814 | static bool |
| 815 | extent_register(tsdn_t *tsdn, extent_t *extent) { |
no test coverage detected