| 1416 | } |
| 1417 | |
| 1418 | static extent_t * |
| 1419 | extent_alloc_wrapper_hard(tsdn_t *tsdn, arena_t *arena, |
| 1420 | extent_hooks_t **r_extent_hooks, void *new_addr, size_t size, size_t pad, |
| 1421 | size_t alignment, bool slab, szind_t szind, bool *zero, bool *commit) { |
| 1422 | size_t esize = size + pad; |
| 1423 | extent_t *extent = extent_alloc(tsdn, arena); |
| 1424 | if (extent == NULL) { |
| 1425 | return NULL; |
| 1426 | } |
| 1427 | void *addr; |
| 1428 | if (*r_extent_hooks == &extent_hooks_default) { |
| 1429 | /* Call directly to propagate tsdn. */ |
| 1430 | addr = extent_alloc_default_impl(tsdn, arena, new_addr, esize, |
| 1431 | alignment, zero, commit); |
| 1432 | } else { |
| 1433 | extent_hook_pre_reentrancy(tsdn, arena); |
| 1434 | addr = (*r_extent_hooks)->alloc(*r_extent_hooks, new_addr, |
| 1435 | esize, alignment, zero, commit, arena_ind_get(arena)); |
| 1436 | extent_hook_post_reentrancy(tsdn); |
| 1437 | } |
| 1438 | if (addr == NULL) { |
| 1439 | extent_dalloc(tsdn, arena, extent); |
| 1440 | return NULL; |
| 1441 | } |
| 1442 | extent_init(extent, arena, addr, esize, slab, szind, |
| 1443 | arena_extent_sn_next(arena), extent_state_active, *zero, *commit, |
| 1444 | true); |
| 1445 | if (pad != 0) { |
| 1446 | extent_addr_randomize(tsdn, extent, alignment); |
| 1447 | } |
| 1448 | if (extent_register(tsdn, extent)) { |
| 1449 | extents_leak(tsdn, arena, r_extent_hooks, |
| 1450 | &arena->extents_retained, extent, false); |
| 1451 | return NULL; |
| 1452 | } |
| 1453 | |
| 1454 | return extent; |
| 1455 | } |
| 1456 | |
| 1457 | extent_t * |
| 1458 | extent_alloc_wrapper(tsdn_t *tsdn, arena_t *arena, |
no test coverage detected