| 639 | } |
| 640 | |
| 641 | static ctl_arena_t * |
| 642 | arenas_i_impl(tsd_t *tsd, size_t i, bool compat, bool init) { |
| 643 | ctl_arena_t *ret; |
| 644 | |
| 645 | assert(!compat || !init); |
| 646 | |
| 647 | ret = ctl_arenas->arenas[arenas_i2a_impl(i, compat, false)]; |
| 648 | if (init && ret == NULL) { |
| 649 | if (config_stats) { |
| 650 | struct container_s { |
| 651 | ctl_arena_t ctl_arena; |
| 652 | ctl_arena_stats_t astats; |
| 653 | }; |
| 654 | struct container_s *cont = |
| 655 | (struct container_s *)base_alloc(tsd_tsdn(tsd), |
| 656 | b0get(), sizeof(struct container_s), QUANTUM); |
| 657 | if (cont == NULL) { |
| 658 | return NULL; |
| 659 | } |
| 660 | ret = &cont->ctl_arena; |
| 661 | ret->astats = &cont->astats; |
| 662 | } else { |
| 663 | ret = (ctl_arena_t *)base_alloc(tsd_tsdn(tsd), b0get(), |
| 664 | sizeof(ctl_arena_t), QUANTUM); |
| 665 | if (ret == NULL) { |
| 666 | return NULL; |
| 667 | } |
| 668 | } |
| 669 | ret->arena_ind = (unsigned)i; |
| 670 | ctl_arenas->arenas[arenas_i2a_impl(i, compat, false)] = ret; |
| 671 | } |
| 672 | |
| 673 | assert(ret == NULL || arenas_i2a(ret->arena_ind) == arenas_i2a(i)); |
| 674 | return ret; |
| 675 | } |
| 676 | |
| 677 | static ctl_arena_t * |
| 678 | arenas_i(size_t i) { |
no test coverage detected