| 1112 | } |
| 1113 | |
| 1114 | static extent_t * |
| 1115 | arena_slab_alloc(tsdn_t *tsdn, arena_t *arena, szind_t binind, |
| 1116 | const bin_info_t *bin_info) { |
| 1117 | witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn), |
| 1118 | WITNESS_RANK_CORE, 0); |
| 1119 | |
| 1120 | extent_hooks_t *extent_hooks = EXTENT_HOOKS_INITIALIZER; |
| 1121 | szind_t szind = sz_size2index(bin_info->reg_size); |
| 1122 | bool zero = false; |
| 1123 | bool commit = true; |
| 1124 | extent_t *slab = extents_alloc(tsdn, arena, &extent_hooks, |
| 1125 | &arena->extents_dirty, NULL, bin_info->slab_size, 0, PAGE, true, |
| 1126 | binind, &zero, &commit); |
| 1127 | if (slab == NULL) { |
| 1128 | slab = extents_alloc(tsdn, arena, &extent_hooks, |
| 1129 | &arena->extents_muzzy, NULL, bin_info->slab_size, 0, PAGE, |
| 1130 | true, binind, &zero, &commit); |
| 1131 | } |
| 1132 | if (slab == NULL) { |
| 1133 | slab = arena_slab_alloc_hard(tsdn, arena, &extent_hooks, |
| 1134 | bin_info, szind); |
| 1135 | if (slab == NULL) { |
| 1136 | return NULL; |
| 1137 | } |
| 1138 | } |
| 1139 | assert(extent_slab_get(slab)); |
| 1140 | |
| 1141 | /* Initialize slab internals. */ |
| 1142 | arena_slab_data_t *slab_data = extent_slab_data_get(slab); |
| 1143 | extent_nfree_set(slab, bin_info->nregs); |
| 1144 | bitmap_init(slab_data->bitmap, &bin_info->bitmap_info, false); |
| 1145 | |
| 1146 | arena_nactive_add(arena, extent_size_get(slab) >> LG_PAGE); |
| 1147 | |
| 1148 | return slab; |
| 1149 | } |
| 1150 | |
| 1151 | static extent_t * |
| 1152 | arena_bin_nonfull_slab_get(tsdn_t *tsdn, arena_t *arena, bin_t *bin, |
no test coverage detected