From 43f1c8080ae209f41b95a9a390f0596c454b30d9 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Wed, 1 Jan 2014 23:04:25 +0200
Subject: [PATCH] m_realloc: Account only allocation size difference in
 total_bytes_allocated.

---
 py/malloc.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/py/malloc.c b/py/malloc.c
index c65d38a96..a94edd3fe 100644
--- a/py/malloc.c
+++ b/py/malloc.c
@@ -41,7 +41,12 @@ void *m_realloc(void *ptr, int old_num_bytes, int new_num_bytes) {
         printf("could not allocate memory, reallocating %d bytes\n", new_num_bytes);
         return NULL;
     }
-    total_bytes_allocated += new_num_bytes;
+    // At first thought, "Total bytes allocated" should only grow,
+    // after all, it's *total*. But consider for example 2K block
+    // shrunk to 1K and then grown to 2K again. It's still 2K
+    // allocated total. If we process only positive increments,
+    // we'll count 3K.
+    total_bytes_allocated += new_num_bytes - old_num_bytes;
     return ptr;
 }
 
-- 
GitLab