From 26ed183556f3df9e9bde6f6d47143aa4a18ae463 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 10 Jun 2021 08:40:16 +0200 Subject: [PATCH] MINOR: pools: call malloc_trim() under thread isolation pool_gc() was adjusted to run under thread isolation by commit c0e2ff202 ("MEDIUM: memory: make pool_gc() run under thread isolation") so that the underlying malloc() and free() don't compete between threads during these potentially aggressive moments (especially when mmap/munmap are involved). Commit 88366c292 ("MEDIUM: pools: call malloc_trim() from pool_gc()") later added a call to malloc_trim() but made it outside of the thread isolation, which is contrary to the principle explained above. Also it missed it in the locked version, meaning that those without a lockless implementation cannot benefit from trimming. This patch fixes that by calling it before thread_release() in both places. --- src/pool.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pool.c b/src/pool.c index c69143a089..dc84963659 100644 --- a/src/pool.c +++ b/src/pool.c @@ -345,12 +345,11 @@ void pool_gc(struct pool_head *pool_ctx) } } - if (!isolated) - thread_release(); - #if defined(HA_HAVE_MALLOC_TRIM) malloc_trim(0); #endif + if (!isolated) + thread_release(); } #else /* CONFIG_HAP_LOCKLESS_POOLS */ @@ -402,6 +401,10 @@ void pool_gc(struct pool_head *pool_ctx) } } +#if defined(HA_HAVE_MALLOC_TRIM) + malloc_trim(0); +#endif + if (!isolated) thread_release(); } -- 2.39.5