BUG/MINOR: memprof: properly account for differences for realloc()
The realloc() function checks if the size grew or reduced in order to
count an allocation or a free, but it does so with the absolute (new
or old) value instead of the difference, resulting in realloc() often
being credited for allocating too much.
No backport is needed.
diff --git a/src/activity.c b/src/activity.c
index 4dc832e..7d2ddac 100644
--- a/src/activity.c
+++ b/src/activity.c
@@ -281,10 +281,10 @@
bin = memprof_get_bin(__builtin_return_address(0));
if (size > size_before) {
_HA_ATOMIC_ADD(&bin->alloc_calls, 1);
- _HA_ATOMIC_ADD(&bin->alloc_tot, size);
+ _HA_ATOMIC_ADD(&bin->alloc_tot, size - size_before);
} else if (size < size_before) {
_HA_ATOMIC_ADD(&bin->free_calls, 1);
- _HA_ATOMIC_ADD(&bin->free_tot, size_before);
+ _HA_ATOMIC_ADD(&bin->free_tot, size_before - size);
}
return ret;
}