MEDIUM: pool: support purging jemalloc arenas in trim_all_pools()

In the case of Linux/glibc, falling back to malloc_trim if jemalloc
had not been detected beforehand.
This commit is contained in:
David Carlier 2021-11-25 16:14:38 +00:00 committed by Willy Tarreau
parent ed232148a7
commit d450ff636c

View File

@ -48,10 +48,23 @@ static int(*my_mallctl)(const char *, void *, size_t *, void *, size_t) = NULL;
/* ask the allocator to trim memory pools */
static void trim_all_pools(void)
{
if (my_mallctl) {
unsigned int i, narenas = 0;
size_t len = sizeof(narenas);
if (my_mallctl("arenas.narenas", &narenas, &len, NULL, 0) == 0) {
for (i = 0; i < narenas; i ++) {
char mib[32] = {0};
snprintf(mib, sizeof(mib), "arena.%u.purge", i);
(void)my_mallctl(mib, NULL, NULL, NULL, 0);
}
}
} else {
#if defined(HA_HAVE_MALLOC_TRIM)
if (using_default_allocator)
malloc_trim(0);
if (using_default_allocator)
malloc_trim(0);
#endif
}
}
/* check if we're using the same allocator as the one that provides