]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: threads: set threads_idle and threads_harmless even with no threads
authorWilly Tarreau <w@1wt.eu>
Tue, 15 Apr 2025 07:03:35 +0000 (09:03 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 17 Apr 2025 14:25:47 +0000 (16:25 +0200)
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.

include/haproxy/thread.h

index c71cd25ab36b3332fbdb147e5b97f9dac1e3080b..6ba6602cc9a6738c8b584cb2766431a1e67152e5 100644 (file)
@@ -110,27 +110,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()