From: Willy Tarreau Date: Tue, 11 May 2021 07:12:56 +0000 (+0200) Subject: BUG/MINOR: memprof: properly account for differences for realloc() X-Git-Tag: v2.4.0~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79acefa749dcafd1ad9aee5cdb85e5a57cf61b2c;p=thirdparty%2Fhaproxy.git 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 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; }