BUG/MINOR: debug: fix incorrect profiling status reporting in show threads
Thread dumps include a field "prof" for each thread that reports whether
task profiling is currently active or not. It turns out that in 2.7-dev1,
commit 680ed5f28 ("MINOR: task: move profiling bit to per-thread")
mistakenly replaced it with a check for the current thread's bit in the
thread dumps, which basically is the only place where another thread is
being watched. The same mistake was done a few lines later by confusing
threads_want_rdv_mask with the profiling mask. This mask disappeared
in 2.7-dev2 with commit 598cf3f22 ("MAJOR: threads: change thread_isolate
to support inter-group synchronization"), though instead we know the ID
of the isolated thread. This commit fixes this and now reports "isolated"
instead of "wantrdv".
This can be backported to 2.7.
diff --git a/src/debug.c b/src/debug.c
index a68c45d..a53d349 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -198,12 +198,12 @@
ha_thread_ctx[thr].rq_total,
ha_thread_info[thr].tgid, ha_thread_info[thr].ltid + 1,
stuck,
- !!(th_ctx->flags & TH_FL_TASK_PROFILING));
+ !!(ha_thread_ctx[thr].flags & TH_FL_TASK_PROFILING));
chunk_appendf(buf,
- " harmless=%d wantrdv=%d",
+ " harmless=%d isolated=%d",
!!(_HA_ATOMIC_LOAD(&ha_tgroup_ctx[tgrp-1].threads_harmless) & thr_bit),
- !!(th_ctx->flags & TH_FL_TASK_PROFILING));
+ isolated_thread == thr);
chunk_appendf(buf, "\n");
chunk_appendf(buf, " cpu_ns: poll=%llu now=%llu diff=%llu\n", p, n, n-p);