BUG/MEDIUM: debug: fix possible hang when multiple threads dump at once

A bug in the thread dumper was introduced by commit 00c27b50c ("MEDIUM:
debug: make the thread dumper not rely on a thread mask anymore"). If
two or more threads try to trigger a thread dump exactly at the same
time, the second one may loop indefinitely trying to set the value to 1
while the other ones will wait for it to finish dumping before leaving.
This is a consequence of a logic change using thread numbers instead of
a thread mask, as threads do not need to see all other ones there anymore.

No backport is needed, this is only for 2.7.
This commit is contained in:
Willy Tarreau 2022-07-13 08:59:39 +02:00
parent a5b5075211
commit 672972604f

View File

@ -1313,12 +1313,11 @@ void ha_thread_dump_all_to_trash()
{ {
unsigned int old; unsigned int old;
while (1) { /* initiate a dump starting from first thread. Use a CAS
old = 0; * so that we don't wait if we're not the first one.
if (HA_ATOMIC_CAS(&thread_dump_state, &old, 1)) */
break; old = 0;
ha_thread_relax(); HA_ATOMIC_CAS(&thread_dump_state, &old, 1);
}
thread_dump_buffer = &trash; thread_dump_buffer = &trash;
thread_dump_tid = tid; thread_dump_tid = tid;