From 2268f10dd6fb8852b04fd302f095556337ec7372 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 22 Nov 2023 18:01:25 +0100 Subject: [PATCH] DEBUG: tinfo: store the pthread ID and the stack pointer in tinfo When debugging a core, it's difficult to match a given gdb thread number against an internal thread. Let's just store the pthread ID and the stack pointer in each tinfo. This could help in the future by allowing to just glance over them and pick the right one depending what info is found first. --- include/haproxy/tinfo-t.h | 4 ++++ src/haproxy.c | 6 ++++++ 2 files changed, 10 insertions(+) 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();