diff --git a/h_malloc.c b/h_malloc.c index 240166f..479ec4c 100644 --- a/h_malloc.c +++ b/h_malloc.c @@ -1800,48 +1800,51 @@ EXPORT int h_malloc_info(int options, UNUSED FILE *fp) { #if CONFIG_STATS fputs("", fp); - for (unsigned arena = 0; arena < N_ARENA; arena++) { - fprintf(fp, "", arena); - for (unsigned class = 0; class < N_SIZE_CLASSES; class++) { - struct size_class *c = &ro.size_class_metadata[arena][class]; + if (is_init()) { + for (unsigned arena = 0; arena < N_ARENA; arena++) { + fprintf(fp, "", arena); - u64 nmalloc; - u64 ndalloc; - size_t slab_allocated; - size_t allocated; + for (unsigned class = 0; class < N_SIZE_CLASSES; class++) { + struct size_class *c = &ro.size_class_metadata[arena][class]; - mutex_lock(&c->lock); - nmalloc = c->nmalloc; - ndalloc = c->ndalloc; - slab_allocated = c->slab_allocated; - allocated = c->allocated; - mutex_unlock(&c->lock); + u64 nmalloc; + u64 ndalloc; + size_t slab_allocated; + size_t allocated; - if (nmalloc || ndalloc || slab_allocated || allocated) { - fprintf(fp, "", class, size_classes[class]); - fprintf(fp, "%" PRIu64 "", nmalloc); - fprintf(fp, "%" PRIu64 "", ndalloc); - fprintf(fp, "%zu", slab_allocated); - fprintf(fp, "%zu", allocated); - fputs("", fp); + mutex_lock(&c->lock); + nmalloc = c->nmalloc; + ndalloc = c->ndalloc; + slab_allocated = c->slab_allocated; + allocated = c->allocated; + mutex_unlock(&c->lock); + + if (nmalloc || ndalloc || slab_allocated || allocated) { + fprintf(fp, "", class, size_classes[class]); + fprintf(fp, "%" PRIu64 "", nmalloc); + fprintf(fp, "%" PRIu64 "", ndalloc); + fprintf(fp, "%zu", slab_allocated); + fprintf(fp, "%zu", allocated); + fputs("", fp); + } } + + fputs("", fp); } + size_t region_allocated; + + struct region_allocator *ra = ro.region_allocator; + mutex_lock(&ra->lock); + region_allocated = ra->allocated; + mutex_unlock(&ra->lock); + + fprintf(fp, "", N_ARENA); + fprintf(fp, "%zu", region_allocated); fputs("", fp); } - size_t region_allocated; - - struct region_allocator *ra = ro.region_allocator; - mutex_lock(&ra->lock); - region_allocated = ra->allocated; - mutex_unlock(&ra->lock); - - fprintf(fp, "", N_ARENA); - fprintf(fp, "%zu", region_allocated); - fputs("", fp); - fputs("", fp); return 0;