From: Willy Tarreau Date: Wed, 22 Nov 2023 17:01:25 +0000 (+0100) Subject: DEBUG: tinfo: store the pthread ID and the stack pointer in tinfo X-Git-Tag: v2.9-dev11~28 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2268f10dd6fb8852b04fd302f095556337ec7372;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/include/haproxy/tinfo-t.h b/include/haproxy/tinfo-t.h index 8a4ef994a5..fc8514305d 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 935cb52e86..b3d590e4a4 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();