MINOR: threads: make tg point to the current thread's group

A the "tg" thread-local variable now always points to the current
thread group. It's pre-initializd to the first one during boot and is
set to point to the thread's one by ha_set_tid(). This last one takes
care of checking whether the thread group was assigned or not because
it may be called during boot before threads are initialized.
This commit is contained in:
Willy Tarreau 2021-09-28 08:58:49 +02:00
parent d04bc3ac21
commit fc69e410e6

View File

@ -90,6 +90,7 @@ enum { tid = 0 };
static inline void ha_set_tid(unsigned int tid)
{
ti = &ha_thread_info[tid];
tg = ti->tg ? ti->tg : &ha_tgroup_info[0];
th_ctx = &ha_thread_ctx[tid];
}
@ -201,12 +202,17 @@ extern THREAD_LOCAL unsigned int tid; /* The thread id */
#define ha_sigmask(how, set, oldset) pthread_sigmask(how, set, oldset)
/* sets the thread ID and the TID bit for the current thread */
/* sets the thread ID, TID bit and thread cfg/ctx pointers for the current
* thread. Since it may be called during early boot even before threads are
* initialized, we have to be extra careful about some fields which may still
* be null. For example tg may be null during a part of the boot.
*/
static inline void ha_set_tid(unsigned int data)
{
tid = data;
tid_bit = (1UL << tid);
ti = &ha_thread_info[tid];
tg = ti->tg ? ti->tg : &ha_tgroup_info[0];
th_ctx = &ha_thread_ctx[tid];
}