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").
This commit is contained in:
Willy Tarreau 2021-09-16 09:18:21 +02:00
parent a096155e08
commit c2afb860f2
2 changed files with 18 additions and 0 deletions

View File

@ -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 <malloc.h>
#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 <malloc_np.h>

View File

@ -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));