From 0ec53e07da62fda985c5c87f35fb2365956a243c Mon Sep 17 00:00:00 2001
From: Per Hedbor <ph@opera.com>
Date: Fri, 13 Sep 2013 12:59:52 +0200
Subject: [PATCH] Fixed count_all in the block allocator.

The memory_info() function had a tendency to return values like
0 objects, total 120Kb
---
 src/block_allocator.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/block_allocator.c b/src/block_allocator.c
index 320218a363..de8b96931e 100644
--- a/src/block_allocator.c
+++ b/src/block_allocator.c
@@ -127,13 +127,16 @@ PMOD_EXPORT size_t ba_count(const struct block_allocator * a) {
 }
 
 PMOD_EXPORT void ba_count_all(const struct block_allocator * a, size_t * num, size_t * size) {
-    if (a->size) {
-	size_t n = (a->l.blocks << (a->size-1)) - a->l.blocks;
-	*num = n;
-	*size = a->l.block_size * n;
-    } else {
-	*num = *size = 0;
+    size_t n = 0, b = sizeof( struct block_allocator );
+    unsigned int i;
+    for( i=0; i<a->size; i++ )
+    {
+        struct ba_layout l = ba_get_layout( a, i );
+        b += l.offset + l.block_size + l.doffset;
+        n += a->pages[i]->h.used;
     }
+    *num = n;
+    *size = b;
 }
 
 static void ba_low_alloc(struct block_allocator * a) {
-- 
GitLab