From 79acefa749dcafd1ad9aee5cdb85e5a57cf61b2c Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 11 May 2021 09:12:56 +0200 Subject: [PATCH] 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. --- src/activity.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/activity.c b/src/activity.c index 4dc832ef6a..7d2ddace82 100644 --- a/src/activity.c +++ b/src/activity.c @@ -281,10 +281,10 @@ void *realloc(void *ptr, size_t size) 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; } -- 2.47.3