BUG/MEDIUM: debug: make the debug_handler check for the thread in threads_to_dump
authorWilly Tarreau <w@1wt.eu>
Tue, 3 Mar 2020 07:31:34 +0000 (08:31 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 31 Mar 2020 09:57:52 +0000 (11:57 +0200)
It happens that just sending the debug signal to the process makes on
thread wait for its turn while nobody wants to dump. We need to at
least verify that a dump was really requested for this thread.

This can be backported to 2.1 and 2.0.

(cherry picked from commit 82aafc4a0fd5cf5a5203b37f622105a73fe5ba94)
Signed-off-by: Willy Tarreau <w@1wt.eu>

src/debug.c

index 45d0c4f..03ca876 100644 (file)
@@ -604,6 +604,12 @@ void ha_thread_dump_all_to_trash()
 /* handles DEBUGSIG to dump the state of the thread it's working on */
 void debug_handler(int sig, siginfo_t *si, void *arg)
 {
+       /* first, let's check it's really for us and that we didn't just get
+        * a spurious DEBUGSIG.
+        */
+       if (!(threads_to_dump & tid_bit))
+               return;
+
        /* There are 4 phases in the dump process:
         *   1- wait for our turn, i.e. when all lower bits are gone.
         *   2- perform the action if our bit is set