From: Willy Tarreau Date: Thu, 10 Jun 2021 06:40:16 +0000 (+0200) Subject: MINOR: pools: call malloc_trim() under thread isolation X-Git-Tag: v2.5-dev1~164 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26ed1835;p=thirdparty%2Fhaproxy.git 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. --- 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(); }