| 1041 | } |
| 1042 | |
| 1043 | static void |
| 1044 | ctl_refresh(tsdn_t *tsdn) { |
| 1045 | unsigned i; |
| 1046 | ctl_arena_t *ctl_sarena = arenas_i(MALLCTL_ARENAS_ALL); |
| 1047 | VARIABLE_ARRAY(arena_t *, tarenas, ctl_arenas->narenas); |
| 1048 | |
| 1049 | /* |
| 1050 | * Clear sum stats, since they will be merged into by |
| 1051 | * ctl_arena_refresh(). |
| 1052 | */ |
| 1053 | ctl_arena_clear(ctl_sarena); |
| 1054 | |
| 1055 | for (i = 0; i < ctl_arenas->narenas; i++) { |
| 1056 | tarenas[i] = arena_get(tsdn, i, false); |
| 1057 | } |
| 1058 | |
| 1059 | for (i = 0; i < ctl_arenas->narenas; i++) { |
| 1060 | ctl_arena_t *ctl_arena = arenas_i(i); |
| 1061 | bool initialized = (tarenas[i] != NULL); |
| 1062 | |
| 1063 | ctl_arena->initialized = initialized; |
| 1064 | if (initialized) { |
| 1065 | ctl_arena_refresh(tsdn, tarenas[i], ctl_sarena, i, |
| 1066 | false); |
| 1067 | } |
| 1068 | } |
| 1069 | |
| 1070 | if (config_stats) { |
| 1071 | ctl_stats->allocated = ctl_sarena->astats->allocated_small + |
| 1072 | atomic_load_zu(&ctl_sarena->astats->astats.allocated_large, |
| 1073 | ATOMIC_RELAXED); |
| 1074 | ctl_stats->active = (ctl_sarena->pactive << LG_PAGE); |
| 1075 | ctl_stats->metadata = atomic_load_zu( |
| 1076 | &ctl_sarena->astats->astats.base, ATOMIC_RELAXED) + |
| 1077 | atomic_load_zu(&ctl_sarena->astats->astats.internal, |
| 1078 | ATOMIC_RELAXED); |
| 1079 | ctl_stats->metadata_thp = atomic_load_zu( |
| 1080 | &ctl_sarena->astats->astats.metadata_thp, ATOMIC_RELAXED); |
| 1081 | ctl_stats->resident = atomic_load_zu( |
| 1082 | &ctl_sarena->astats->astats.resident, ATOMIC_RELAXED); |
| 1083 | ctl_stats->mapped = atomic_load_zu( |
| 1084 | &ctl_sarena->astats->astats.mapped, ATOMIC_RELAXED); |
| 1085 | ctl_stats->retained = atomic_load_zu( |
| 1086 | &ctl_sarena->astats->astats.retained, ATOMIC_RELAXED); |
| 1087 | |
| 1088 | ctl_background_thread_stats_read(tsdn); |
| 1089 | |
| 1090 | #define READ_GLOBAL_MUTEX_PROF_DATA(i, mtx) \ |
| 1091 | malloc_mutex_lock(tsdn, &mtx); \ |
| 1092 | malloc_mutex_prof_read(tsdn, &ctl_stats->mutex_prof_data[i], &mtx); \ |
| 1093 | malloc_mutex_unlock(tsdn, &mtx); |
| 1094 | |
| 1095 | if (config_prof && opt_prof) { |
| 1096 | READ_GLOBAL_MUTEX_PROF_DATA(global_prof_mutex_prof, |
| 1097 | bt2gctx_mtx); |
| 1098 | } |
| 1099 | if (have_background_thread) { |
| 1100 | READ_GLOBAL_MUTEX_PROF_DATA( |
no test coverage detected