aboutsummaryrefslogtreecommitdiff
path: root/malloc/malloc.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2010-01-14 13:32:58 -0800
committerUlrich Drepper <drepper@redhat.com>2010-01-14 13:32:58 -0800
commit346bc35c33fa08e23d7774d374b0e2586ca5dab6 (patch)
tree0086222d6c96ac081e65176d37423a85d3a6ea9d /malloc/malloc.c
parent52e2ea9a83ba3c6ea3b39f0f138af4343c9d687c (diff)
downloadglibc-346bc35c33fa08e23d7774d374b0e2586ca5dab6.tar
glibc-346bc35c33fa08e23d7774d374b0e2586ca5dab6.tar.gz
glibc-346bc35c33fa08e23d7774d374b0e2586ca5dab6.tar.bz2
glibc-346bc35c33fa08e23d7774d374b0e2586ca5dab6.zip
Fix malloc_info without prioor allocations.
Diffstat (limited to 'malloc/malloc.c')
-rw-r--r--malloc/malloc.c41
1 files changed, 24 insertions, 17 deletions
diff --git a/malloc/malloc.c b/malloc/malloc.c
index ea10d17f85..b43e454f6e 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -6369,16 +6369,19 @@ malloc_info (int options, FILE *fp)
mbinptr bin = bin_at (ar_ptr, 1);
struct malloc_chunk *r = bin->fd;
- while (r != bin)
+ if (r != NULL)
{
- ++sizes[NFASTBINS].count;
- sizes[NFASTBINS].total += r->size;
- sizes[NFASTBINS].from = MIN (sizes[NFASTBINS].from, r->size);
- sizes[NFASTBINS].to = MAX (sizes[NFASTBINS].to, r->size);
- r = r->fd;
+ while (r != bin)
+ {
+ ++sizes[NFASTBINS].count;
+ sizes[NFASTBINS].total += r->size;
+ sizes[NFASTBINS].from = MIN (sizes[NFASTBINS].from, r->size);
+ sizes[NFASTBINS].to = MAX (sizes[NFASTBINS].to, r->size);
+ r = r->fd;
+ }
+ nblocks += sizes[NFASTBINS].count;
+ avail += sizes[NFASTBINS].total;
}
- nblocks += sizes[NFASTBINS].count;
- avail += sizes[NFASTBINS].total;
for (size_t i = 2; i < NBINS; ++i)
{
@@ -6388,17 +6391,18 @@ malloc_info (int options, FILE *fp)
sizes[NFASTBINS - 1 + i].to = sizes[NFASTBINS - 1 + i].total
= sizes[NFASTBINS - 1 + i].count = 0;
- while (r != bin)
- {
- ++sizes[NFASTBINS - 1 + i].count;
- sizes[NFASTBINS - 1 + i].total += r->size;
- sizes[NFASTBINS - 1 + i].from = MIN (sizes[NFASTBINS - 1 + i].from,
+ if (r != NULL)
+ while (r != bin)
+ {
+ ++sizes[NFASTBINS - 1 + i].count;
+ sizes[NFASTBINS - 1 + i].total += r->size;
+ sizes[NFASTBINS - 1 + i].from
+ = MIN (sizes[NFASTBINS - 1 + i].from, r->size);
+ sizes[NFASTBINS - 1 + i].to = MAX (sizes[NFASTBINS - 1 + i].to,
r->size);
- sizes[NFASTBINS - 1 + i].to = MAX (sizes[NFASTBINS - 1 + i].to,
- r->size);
- r = r->fd;
- }
+ r = r->fd;
+ }
if (sizes[NFASTBINS - 1 + i].count == 0)
sizes[NFASTBINS - 1 + i].from = 0;
@@ -6460,6 +6464,9 @@ malloc_info (int options, FILE *fp)
fputs ("</heap>\n", fp);
}
+ if(__malloc_initialized < 0)
+ ptmalloc_init ();
+
fputs ("<malloc version=\"1\">\n", fp);
/* Iterate over all arenas currently in use. */