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.
This commit is contained in:
Willy Tarreau 2021-05-11 09:12:56 +02:00
parent 3df5989960
commit 79acefa749

View File

@ -281,10 +281,10 @@ void *realloc(void *ptr, size_t size)
bin = memprof_get_bin(__builtin_return_address(0)); bin = memprof_get_bin(__builtin_return_address(0));
if (size > size_before) { if (size > size_before) {
_HA_ATOMIC_ADD(&bin->alloc_calls, 1); _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) { } else if (size < size_before) {
_HA_ATOMIC_ADD(&bin->free_calls, 1); _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; return ret;
} }