| 922 | } |
| 923 | |
| 924 | static void |
| 925 | ctl_refresh(tsdn_t *tsdn) { |
| 926 | unsigned i; |
| 927 | ctl_arena_t *ctl_sarena = arenas_i(MALLCTL_ARENAS_ALL); |
| 928 | VARIABLE_ARRAY(arena_t *, tarenas, ctl_arenas->narenas); |
| 929 | |
| 930 | /* |
| 931 | * Clear sum stats, since they will be merged into by |
| 932 | * ctl_arena_refresh(). |
| 933 | */ |
| 934 | ctl_arena_clear(ctl_sarena); |
| 935 | |
| 936 | for (i = 0; i < ctl_arenas->narenas; i++) { |
| 937 | tarenas[i] = arena_get(tsdn, i, false); |
| 938 | } |
| 939 | |
| 940 | for (i = 0; i < ctl_arenas->narenas; i++) { |
| 941 | ctl_arena_t *ctl_arena = arenas_i(i); |
| 942 | bool initialized = (tarenas[i] != NULL); |
| 943 | |
| 944 | ctl_arena->initialized = initialized; |
| 945 | if (initialized) { |
| 946 | ctl_arena_refresh(tsdn, tarenas[i], ctl_sarena, i, |
| 947 | false); |
| 948 | } |
| 949 | } |
| 950 | |
| 951 | if (config_stats) { |
| 952 | ctl_stats->allocated = ctl_sarena->astats->allocated_small + |
| 953 | atomic_load_zu(&ctl_sarena->astats->astats.allocated_large, |
| 954 | ATOMIC_RELAXED); |
| 955 | ctl_stats->active = (ctl_sarena->pactive << LG_PAGE); |
| 956 | ctl_stats->metadata = atomic_load_zu( |
| 957 | &ctl_sarena->astats->astats.base, ATOMIC_RELAXED) + |
| 958 | atomic_load_zu(&ctl_sarena->astats->astats.internal, |
| 959 | ATOMIC_RELAXED); |
| 960 | ctl_stats->metadata_thp = atomic_load_zu( |
| 961 | &ctl_sarena->astats->astats.metadata_thp, ATOMIC_RELAXED); |
| 962 | ctl_stats->resident = atomic_load_zu( |
| 963 | &ctl_sarena->astats->astats.resident, ATOMIC_RELAXED); |
| 964 | ctl_stats->mapped = atomic_load_zu( |
| 965 | &ctl_sarena->astats->astats.mapped, ATOMIC_RELAXED); |
| 966 | ctl_stats->retained = atomic_load_zu( |
| 967 | &ctl_sarena->astats->astats.retained, ATOMIC_RELAXED); |
| 968 | |
| 969 | ctl_background_thread_stats_read(tsdn); |
| 970 | |
| 971 | #define READ_GLOBAL_MUTEX_PROF_DATA(i, mtx) \ |
| 972 | malloc_mutex_lock(tsdn, &mtx); \ |
| 973 | malloc_mutex_prof_read(tsdn, &ctl_stats->mutex_prof_data[i], &mtx); \ |
| 974 | malloc_mutex_unlock(tsdn, &mtx); |
| 975 | |
| 976 | if (config_prof && opt_prof) { |
| 977 | READ_GLOBAL_MUTEX_PROF_DATA(global_prof_mutex_prof, |
| 978 | bt2gctx_mtx); |
| 979 | } |
| 980 | if (have_background_thread) { |
| 981 | READ_GLOBAL_MUTEX_PROF_DATA( |
no test coverage detected