| 1489 | } |
| 1490 | |
| 1491 | static extent_t * |
| 1492 | extent_alloc_wrapper_hard(tsdn_t *tsdn, arena_t *arena, |
| 1493 | extent_hooks_t **r_extent_hooks, void *new_addr, size_t size, size_t pad, |
| 1494 | size_t alignment, bool slab, szind_t szind, bool *zero, bool *commit) { |
| 1495 | size_t esize = size + pad; |
| 1496 | extent_t *extent = extent_alloc(tsdn, arena); |
| 1497 | if (extent == NULL) { |
| 1498 | return NULL; |
| 1499 | } |
| 1500 | void *addr; |
| 1501 | size_t palignment = ALIGNMENT_CEILING(alignment, PAGE); |
| 1502 | if (*r_extent_hooks == &extent_hooks_default) { |
| 1503 | /* Call directly to propagate tsdn. */ |
| 1504 | addr = extent_alloc_default_impl(tsdn, arena, new_addr, esize, |
| 1505 | palignment, zero, commit); |
| 1506 | } else { |
| 1507 | extent_hook_pre_reentrancy(tsdn, arena); |
| 1508 | addr = (*r_extent_hooks)->alloc(*r_extent_hooks, new_addr, |
| 1509 | esize, palignment, zero, commit, arena_ind_get(arena)); |
| 1510 | extent_hook_post_reentrancy(tsdn); |
| 1511 | } |
| 1512 | if (addr == NULL) { |
| 1513 | extent_dalloc(tsdn, arena, extent); |
| 1514 | return NULL; |
| 1515 | } |
| 1516 | extent_init(extent, arena, addr, esize, slab, szind, |
| 1517 | arena_extent_sn_next(arena), extent_state_active, *zero, *commit, |
| 1518 | true, EXTENT_NOT_HEAD); |
| 1519 | if (pad != 0) { |
| 1520 | extent_addr_randomize(tsdn, extent, alignment); |
| 1521 | } |
| 1522 | if (extent_register(tsdn, extent)) { |
| 1523 | extent_dalloc(tsdn, arena, extent); |
| 1524 | return NULL; |
| 1525 | } |
| 1526 | |
| 1527 | return extent; |
| 1528 | } |
| 1529 | |
| 1530 | extent_t * |
| 1531 | extent_alloc_wrapper(tsdn_t *tsdn, arena_t *arena, |
no test coverage detected