From 453a7dfa3ffabb85cd11e7f244688799d71052e8 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 15 Apr 2025 09:03:35 +0200 Subject: [PATCH] BUG/MINOR: threads: set threads_idle and threads_harmless even with no threads Some signal handlers rely on these to decide about the level of detail to provide in dumps, so let's properly fill the info about entering/leaving idle. Note that for consistency with other tests we're using bitops with t->ltid_bit, while we could simply assign 0/1 to the fields. But it makes the code more readable and the whole difference is only 88 bytes on a 3MB executable. This bug is not important, and while older versions are likely affected as well, it's not worth taking the risk to backport this in case it would wake up an obscure bug. (cherry picked from commit 337017e2f96deea8e762d968820e575a1c2181b6) Signed-off-by: Willy Tarreau --- include/haproxy/thread.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/haproxy/thread.h b/include/haproxy/thread.h index 0984c67..ef08369 100644 --- a/include/haproxy/thread.h +++ b/include/haproxy/thread.h @@ -108,27 +108,32 @@ static inline void ha_set_thread(const struct thread_info *thr) static inline void thread_idle_now() { + tg_ctx->threads_idle |= ti->ltid_bit; } static inline void thread_idle_end() { + tg_ctx->threads_idle &= ~ti->ltid_bit; } static inline void thread_harmless_now() { + tg_ctx->threads_harmless |= ti->ltid_bit; } static inline int is_thread_harmless() { - return 1; + return !!(tg_ctx->threads_harmless & ti->ltid_bit); } static inline void thread_harmless_end() { + tg_ctx->threads_harmless &= ~ti->ltid_bit; } static inline void thread_harmless_end_sig() { + tg_ctx->threads_harmless &= ~ti->ltid_bit; } static inline void thread_isolate() -- 1.7.10.4