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.
diff --git a/include/haproxy/thread.h b/include/haproxy/thread.h
index 37808d9..14c88f0 100644
--- a/include/haproxy/thread.h
+++ b/include/haproxy/thread.h
@@ -90,6 +90,7 @@
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 @@
#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];
}