| 292 | } |
| 293 | |
| 294 | static inline void |
| 295 | rtree_leaf_elm_write(tsdn_t *tsdn, rtree_t *rtree, |
| 296 | rtree_leaf_elm_t *elm, extent_t *extent, szind_t szind, bool slab) { |
| 297 | #ifdef RTREE_LEAF_COMPACT |
| 298 | uintptr_t bits = ((uintptr_t)szind << LG_VADDR) | |
| 299 | ((uintptr_t)extent & (((uintptr_t)0x1 << LG_VADDR) - 1)) | |
| 300 | ((uintptr_t)slab); |
| 301 | atomic_store_p(&elm->le_bits, (void *)bits, ATOMIC_RELEASE); |
| 302 | #else |
| 303 | rtree_leaf_elm_slab_write(tsdn, rtree, elm, slab); |
| 304 | rtree_leaf_elm_szind_write(tsdn, rtree, elm, szind); |
| 305 | /* |
| 306 | * Write extent last, since the element is atomically considered valid |
| 307 | * as soon as the extent field is non-NULL. |
| 308 | */ |
| 309 | rtree_leaf_elm_extent_write(tsdn, rtree, elm, extent); |
| 310 | #endif |
| 311 | } |
| 312 | |
| 313 | static inline void |
| 314 | rtree_leaf_elm_szind_slab_update(tsdn_t *tsdn, rtree_t *rtree, |