diff --git a/include/common/debug.h b/include/common/debug.h index 333203dd2..f43258e92 100644 --- a/include/common/debug.h +++ b/include/common/debug.h @@ -70,6 +70,7 @@ struct task; struct buffer; +extern volatile unsigned long threads_to_dump; void ha_task_dump(struct buffer *buf, const struct task *task, const char *pfx); void ha_thread_dump(struct buffer *buf, int thr, int calling_tid); void ha_thread_dump_all_to_trash(); diff --git a/src/debug.c b/src/debug.c index 9f538b660..0522f88bf 100644 --- a/src/debug.c +++ b/src/debug.c @@ -29,6 +29,11 @@ #include #include +/* mask of threads still having to dump, used to respect ordering. Only used + * when USE_THREAD_DUMP is set. + */ +volatile unsigned long threads_to_dump = 0; + /* Dumps to the buffer some known information for the desired thread, and * optionally extra info for the current thread. The dump will be appended to * the buffer, so the caller is responsible for preliminary initializing it. @@ -404,9 +409,6 @@ void ha_thread_dump_all_to_trash() */ #define DEBUGSIG SIGURG -/* mask of threads still having to dump, used to respect ordering */ -static volatile unsigned long threads_to_dump; - /* ID of the thread requesting the dump */ static unsigned int thread_dump_tid; diff --git a/src/wdt.c b/src/wdt.c index 19d36c34d..aa89fd443 100644 --- a/src/wdt.c +++ b/src/wdt.c @@ -75,7 +75,7 @@ void wdt_handler(int sig, siginfo_t *si, void *arg) if (n - p < 1000000000UL) goto update_and_leave; - if ((threads_harmless_mask|sleeping_thread_mask) & (1UL << thr)) { + if ((threads_harmless_mask|sleeping_thread_mask|threads_to_dump) & (1UL << thr)) { /* This thread is currently doing exactly nothing * waiting in the poll loop (unlikely but possible), * waiting for all other threads to join the rendez-vous