| 1233 | } |
| 1234 | |
| 1235 | static extent_t * |
| 1236 | extent_alloc_wrapper_hard(tsdn_t *tsdn, arena_t *arena, |
| 1237 | extent_hooks_t **r_extent_hooks, void *new_addr, size_t size, size_t pad, |
| 1238 | size_t alignment, bool slab, szind_t szind, bool *zero, bool *commit) { |
| 1239 | size_t esize = size + pad; |
| 1240 | extent_t *extent = extent_alloc(tsdn, arena); |
| 1241 | if (extent == NULL) { |
| 1242 | return NULL; |
| 1243 | } |
| 1244 | void *addr; |
| 1245 | if (*r_extent_hooks == &extent_hooks_default) { |
| 1246 | /* Call directly to propagate tsdn. */ |
| 1247 | addr = extent_alloc_default_impl(tsdn, arena, new_addr, esize, |
| 1248 | alignment, zero, commit); |
| 1249 | } else { |
| 1250 | addr = (*r_extent_hooks)->alloc(*r_extent_hooks, new_addr, |
| 1251 | esize, alignment, zero, commit, arena_ind_get(arena)); |
| 1252 | } |
| 1253 | if (addr == NULL) { |
| 1254 | extent_dalloc(tsdn, arena, extent); |
| 1255 | return NULL; |
| 1256 | } |
| 1257 | extent_init(extent, arena, addr, esize, slab, szind, |
| 1258 | arena_extent_sn_next(arena), extent_state_active, zero, commit); |
| 1259 | if (pad != 0) { |
| 1260 | extent_addr_randomize(tsdn, extent, alignment); |
| 1261 | } |
| 1262 | if (extent_register(tsdn, extent)) { |
| 1263 | extents_leak(tsdn, arena, r_extent_hooks, |
| 1264 | &arena->extents_retained, extent, false); |
| 1265 | return NULL; |
| 1266 | } |
| 1267 | |
| 1268 | return extent; |
| 1269 | } |
| 1270 | |
| 1271 | extent_t * |
| 1272 | extent_alloc_wrapper(tsdn_t *tsdn, arena_t *arena, |
no test coverage detected