diff options
author | Ulrich Drepper <drepper@redhat.com> | 2010-01-14 13:32:58 -0800 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2010-01-14 13:32:58 -0800 |
commit | 346bc35c33fa08e23d7774d374b0e2586ca5dab6 (patch) | |
tree | 0086222d6c96ac081e65176d37423a85d3a6ea9d | |
parent | 52e2ea9a83ba3c6ea3b39f0f138af4343c9d687c (diff) | |
download | glibc-346bc35c33fa08e23d7774d374b0e2586ca5dab6.zip glibc-346bc35c33fa08e23d7774d374b0e2586ca5dab6.tar.gz glibc-346bc35c33fa08e23d7774d374b0e2586ca5dab6.tar.bz2 |
Fix malloc_info without prioor allocations.
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | malloc/malloc.c | 41 |
2 files changed, 28 insertions, 17 deletions
@@ -1,5 +1,9 @@ 2010-01-14 Ulrich Drepper <drepper@redhat.com> + [BZ #11126] + * malloc/malloc.c (malloc_info): Initialize malloc if not already + done. Handle empty bin lists. + * posix/unistd.h: Change getpagesize and getdtablesize declaration visibility some more. diff --git a/malloc/malloc.c b/malloc/malloc.c index ea10d17..b43e454 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. */ |