| 60 | #ifdef JEMALLOC_JET |
| 61 | # if RTREE_HEIGHT > 1 |
| 62 | static void |
| 63 | rtree_delete_subtree(tsdn_t *tsdn, rtree_t *rtree, rtree_node_elm_t *subtree, |
| 64 | unsigned level) { |
| 65 | size_t nchildren = ZU(1) << rtree_levels[level].bits; |
| 66 | if (level + 2 < RTREE_HEIGHT) { |
| 67 | for (size_t i = 0; i < nchildren; i++) { |
| 68 | rtree_node_elm_t *node = |
| 69 | (rtree_node_elm_t *)atomic_load_p(&subtree[i].child, |
| 70 | ATOMIC_RELAXED); |
| 71 | if (node != NULL) { |
| 72 | rtree_delete_subtree(tsdn, rtree, node, level + |
| 73 | 1); |
| 74 | } |
| 75 | } |
| 76 | } else { |
| 77 | for (size_t i = 0; i < nchildren; i++) { |
| 78 | rtree_leaf_elm_t *leaf = |
| 79 | (rtree_leaf_elm_t *)atomic_load_p(&subtree[i].child, |
| 80 | ATOMIC_RELAXED); |
| 81 | if (leaf != NULL) { |
| 82 | rtree_leaf_dalloc(tsdn, rtree, leaf); |
| 83 | } |
| 84 | } |
| 85 | } |
| 86 | |
| 87 | if (subtree != rtree->root) { |
| 88 | rtree_node_dalloc(tsdn, rtree, subtree); |
| 89 | } |
| 90 | } |
| 91 | # endif |
| 92 | |
| 93 | void |