From c2afb860f297eb82039d821bd25bdd3cf66abe28 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 16 Sep 2021 09:18:21 +0200 Subject: [PATCH] MINOR: pools: use mallinfo2() when available instead of mallinfo() Ilya reported in issue #1391 a build warning on Fedora about mallinfo() being deprecated in favor of mallinfo2() since glibc-2.33. Let's add support for it. This should be backported where the following commit is also backported: 157e39303 ("MINOR: pools: automatically disable malloc_trim() with external allocators"). --- include/haproxy/compat.h | 6 ++++++ src/pool.c | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/haproxy/compat.h b/include/haproxy/compat.h index 84cdbe0d5..19a531786 100644 --- a/include/haproxy/compat.h +++ b/include/haproxy/compat.h @@ -282,6 +282,12 @@ typedef struct { } empty_t; #define HA_HAVE_FAST_MALLOC #endif +/* glibc 2.33 provides mallinfo2() that overcomes mallinfo()'s type limitations */ +#if (defined(__GNU_LIBRARY__) && (__GLIBC__ > 2 || __GLIBC__ == 2 && __GLIBC_MINOR__ >= 33)) +#include +#define HA_HAVE_MALLINFO2 +#endif + /* FreeBSD also has malloc_usable_size() but it requires malloc_np.h */ #if defined(USE_MEMORY_PROFILING) && defined(__FreeBSD__) && (__FreeBSD_version >= 700002) #include diff --git a/src/pool.c b/src/pool.c index 94bbb8355..ad63d9ba3 100644 --- a/src/pool.c +++ b/src/pool.c @@ -58,12 +58,24 @@ static void trim_all_pools(void) */ static void detect_allocator(void) { +#ifdef HA_HAVE_MALLINFO2 + struct mallinfo2 mi1, mi2; +#else struct mallinfo mi1, mi2; +#endif void *ptr; +#ifdef HA_HAVE_MALLINFO2 + mi1 = mallinfo2(); +#else mi1 = mallinfo(); +#endif ptr = DISGUISE(malloc(1)); +#ifdef HA_HAVE_MALLINFO2 + mi2 = mallinfo2(); +#else mi2 = mallinfo(); +#endif free(DISGUISE(ptr)); using_libc_allocator = !!memcmp(&mi1, &mi2, sizeof(mi1));