diff --git a/include/haproxy/tinfo-t.h b/include/haproxy/tinfo-t.h index 8a4ef994a..fc8514305 100644 --- a/include/haproxy/tinfo-t.h +++ b/include/haproxy/tinfo-t.h @@ -110,6 +110,10 @@ struct thread_info { uint tid, ltid; /* process-wide and group-wide thread ID (start at 0) */ ulong ltid_bit; /* bit masks for the tid/ltid */ uint tgid; /* ID of the thread group this thread belongs to (starts at 1; 0=unset) */ + /* 32-bit hole here */ + + ullong pth_id; /* the pthread_t cast to a ullong */ + void *stack_top; /* the top of the stack when entering the thread */ /* pad to cache line (64B) */ char __pad[0]; /* unused except to check remaining room */ diff --git a/src/haproxy.c b/src/haproxy.c index 935cb52e8..b3d590e4a 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -3056,6 +3056,12 @@ static void *run_thread_poll_loop(void *data) ha_set_thread(data); set_thread_cpu_affinity(); clock_set_local_source(); + +#ifdef USE_THREAD + ha_thread_info[tid].pth_id = ha_get_pthread_id(tid); +#endif + ha_thread_info[tid].stack_top = __builtin_frame_address(0); + /* thread is started, from now on it is not idle nor harmless */ thread_harmless_end(); thread_idle_end();