From: Willy Tarreau Date: Wed, 6 Jul 2022 08:17:21 +0000 (+0200) Subject: CLEANUP: thread: also remove a thread's bit from stopping_threads on stop X-Git-Tag: v2.7-dev2~92 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad92fdf1968ab231cac5eb1c81420568da413cec;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/haproxy.c b/src/haproxy.c index f86e3b5739..85467a58fb 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);