1
0
mirror of http://git.haproxy.org/git/haproxy.git/ synced 2025-04-07 09:42:34 +00:00

BUG/MINOR: illegal use of the malloc_trim() function if jemalloc is used

In the event that HAProxy is linked with the jemalloc library, it is still
shown that malloc_trim() is enabled when executing "haproxy -vv":
  ..
  Support for malloc_trim() is enabled.
  ..

It's not so much a problem as it is that malloc_trim() is called in the
pat_ref_purge_range() function without any checking.

This was solved by setting the using_default_allocator variable to the
correct value in the detect_allocator() function and before calling
malloc_trim() it is checked whether the function should be called.
This commit is contained in:
Miroslav Zagorac 2023-03-22 12:52:19 +01:00 committed by Willy Tarreau
parent 9ef2742a51
commit d8a97d8f60
3 changed files with 6 additions and 6 deletions
include/haproxy
src

View File

@ -101,6 +101,7 @@ extern int mem_poison_byte;
/* set of POOL_DBG_* flags */
extern uint pool_debugging;
int is_trim_enabled(void);
void *pool_get_from_os(struct pool_head *pool);
void pool_put_to_os(struct pool_head *pool, void *ptr);
void *pool_alloc_nocache(struct pool_head *pool);

View File

@ -2084,7 +2084,7 @@ int pat_ref_purge_range(struct pat_ref *ref, uint from, uint to, int budget)
HA_RWLOCK_WRUNLOCK(PATEXP_LOCK, &expr->lock);
#if defined(HA_HAVE_MALLOC_TRIM)
if (done) {
if (done && is_trim_enabled()) {
malloc_trim(0);
}
#endif

View File

@ -177,11 +177,10 @@ static void detect_allocator(void)
my_mallctl = mallctl;
#endif
if (!my_mallctl) {
if (!my_mallctl)
my_mallctl = get_sym_curr_addr("mallctl");
using_default_allocator = (my_mallctl == NULL);
}
using_default_allocator = (my_mallctl == NULL);
if (!my_mallctl) {
#if defined(HA_HAVE_MALLOC_TRIM)
@ -212,7 +211,7 @@ static void detect_allocator(void)
}
}
static int is_trim_enabled(void)
int is_trim_enabled(void)
{
return using_default_allocator;
}