From ad92fdf1968ab231cac5eb1c81420568da413cec Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 6 Jul 2022 10:17:21 +0200 Subject: [PATCH] CLEANUP: thread: also remove a thread's bit from stopping_threads on stop As much as possible we should take care of not leaving bits from stopped threads in shared thread masks. It can avoid issues like the previous fix and will also make debugging less confusing. --- src/haproxy.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/haproxy.c b/src/haproxy.c index f86e3b573..85467a58f 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -2988,6 +2988,8 @@ static void *run_thread_poll_loop(void *data) #ifdef USE_THREAD if (!_HA_ATOMIC_AND_FETCH(&ha_tgroup_info[ti->tgid-1].threads_enabled, ~ti->ltid_bit)) _HA_ATOMIC_AND(&all_tgroups_mask, ~tg->tgid_bit); + if (!_HA_ATOMIC_AND_FETCH(&tg_ctx->stopping_threads, ~ti->ltid_bit)) + _HA_ATOMIC_AND(&stopping_tgroup_mask, ~tg->tgid_bit); _HA_ATOMIC_AND(&all_threads_mask, ~tid_bit); if (tid > 0) pthread_exit(NULL);