mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-03-11 05:48:41 +00:00
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:
parent
a5b5075211
commit
672972604f
11
src/debug.c
11
src/debug.c
@ -1313,12 +1313,11 @@ void ha_thread_dump_all_to_trash()
|
||||
{
|
||||
unsigned int old;
|
||||
|
||||
while (1) {
|
||||
old = 0;
|
||||
if (HA_ATOMIC_CAS(&thread_dump_state, &old, 1))
|
||||
break;
|
||||
ha_thread_relax();
|
||||
}
|
||||
/* initiate a dump starting from first thread. Use a CAS
|
||||
* so that we don't wait if we're not the first one.
|
||||
*/
|
||||
old = 0;
|
||||
HA_ATOMIC_CAS(&thread_dump_state, &old, 1);
|
||||
|
||||
thread_dump_buffer = &trash;
|
||||
thread_dump_tid = tid;
|
||||
|
Loading…
Reference in New Issue
Block a user