From: Willy Tarreau Date: Thu, 16 Sep 2021 07:18:21 +0000 (+0200) Subject: MINOR: pools: use mallinfo2() when available instead of mallinfo() X-Git-Tag: v2.5-dev8~186 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c2afb860f297eb82039d821bd25bdd3cf66abe28;p=thirdparty%2Fhaproxy.git 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"). --- diff --git a/include/haproxy/compat.h b/include/haproxy/compat.h index 84cdbe0d5e..19a5317860 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 94bbb83557..ad63d9ba30 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));