MINOR: threads: add each thread's clockid into the global thread_info
This is the per-thread CPU runtime clock, it will be used to measure
the CPU usage of each thread and by the lockup detection mechanism. It
must only be retrieved at the beginning of run_thread_poll_loop() since
the thread must already have been started for this. But it must be done
before performing any per-thread initcall so that all thread init
functions have access to the clock ID.
Note that it could make sense to always have this clockid available even
in non-threaded situations and place the process' clock there instead.
But it would add portability issues which are currently easy to deal
with by disabling threads so it may not be worth it for now.
diff --git a/include/types/global.h b/include/types/global.h
index db88295..030a553 100644
--- a/include/types/global.h
+++ b/include/types/global.h
@@ -245,6 +245,7 @@
extern struct thread_info {
__decl_hathreads(pthread_t pthread);
+ __decl_hathreads(clockid_t clock_id);
} thread_info[MAX_THREADS];
/* bit values to go with "warned" above */
diff --git a/src/haproxy.c b/src/haproxy.c
index 7422681..692c333 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -2497,6 +2497,11 @@
struct per_thread_deinit_fct *ptdf;
ha_set_tid((unsigned long)data);
+
+#ifdef USE_THREAD
+ pthread_getcpuclockid(pthread_self(), &thread_info[tid].clock_id);
+#endif
+
tv_update_date(-1,-1);
/* per-thread init calls performed here are not allowed to snoop on