Refined mallinfo() implementation (contributed by Eugene Toder).

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7901 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/memcheck/mc_malloc_wrappers.c b/memcheck/mc_malloc_wrappers.c
index 06f568b..0c2eb72 100644
--- a/memcheck/mc_malloc_wrappers.c
+++ b/memcheck/mc_malloc_wrappers.c
@@ -71,7 +71,6 @@
 /* Records blocks after freeing. */
 static MC_Chunk* freed_list_start  = NULL;
 static MC_Chunk* freed_list_end    = NULL;
-static Long      freed_list_volume = 0;
 
 /* Put a shadow chunk on the freed blocks queue, possibly freeing up
    some of the oldest blocks in the queue at the same time. */
@@ -83,33 +82,35 @@
    if (freed_list_end == NULL) {
       tl_assert(freed_list_start == NULL);
       freed_list_end    = freed_list_start = mc;
-      freed_list_volume = (Long)mc->szB;
+      VG_(free_queue_volume) = (Long)mc->szB;
    } else {
       tl_assert(freed_list_end->next == NULL);
       freed_list_end->next = mc;
       freed_list_end       = mc;
-      freed_list_volume += (Long)mc->szB;
+      VG_(free_queue_volume) += (Long)mc->szB;
       if (show)
          VG_(printf)("mc_freelist: acquire: volume now %lld\n", 
-                     freed_list_volume);
+                     VG_(free_queue_volume));
    }
+   VG_(free_queue_length)++;
    mc->next = NULL;
 
    /* Release enough of the oldest blocks to bring the free queue
       volume below vg_clo_freelist_vol. */
 
-   while (freed_list_volume > MC_(clo_freelist_vol)) {
+   while (VG_(free_queue_volume) > MC_(clo_freelist_vol)) {
       MC_Chunk* mc1;
 
       tl_assert(freed_list_start != NULL);
       tl_assert(freed_list_end != NULL);
 
       mc1 = freed_list_start;
-      freed_list_volume -= (Long)mc1->szB;
+      VG_(free_queue_volume) -= (Long)mc1->szB;
+      VG_(free_queue_length)--;
       if (show)
          VG_(printf)("mc_freelist: discard: volume now %lld\n", 
-                     freed_list_volume);
-      tl_assert(freed_list_volume >= 0);
+                     VG_(free_queue_volume));
+      tl_assert(VG_(free_queue_volume) >= 0);
 
       if (freed_list_start == freed_list_end) {
          freed_list_start = freed_list_end = NULL;