diff options
author | Tom de Vries <tdevries@suse.de> | 2022-12-16 15:28:27 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2022-12-16 15:28:27 +0100 |
commit | 832a980e1725a4a7fa527f2dcd92a64d7e68ab0f (patch) | |
tree | e9b093bcdef66a36b675874c42cd25e9bb38febe /gdb | |
parent | c3efaf0afd9d37004c42cdfd3ce0c1bfa979c45e (diff) | |
download | gdb-832a980e1725a4a7fa527f2dcd92a64d7e68ab0f.zip gdb-832a980e1725a4a7fa527f2dcd92a64d7e68ab0f.tar.gz gdb-832a980e1725a4a7fa527f2dcd92a64d7e68ab0f.tar.bz2 |
[gdb/testsuite] Fix race in gdb.threads/detach-step-over.exp
Once in a while I run into:
...
FAIL: gdb.threads/detach-step-over.exp: \
breakpoint-condition-evaluation=host: target-non-stop=off: non-stop=off: \
displaced=off: iter 1: all threads running
...
In can easily reproduce this by doing:
...
# Wait a bit, to give time for the threads to hit the
# breakpoint.
- sleep 1
return true
...
Fix this by counting the running threads in a loop, effectively allowing 10
seconds (instead of 1) for the threads to start running, but only sleeping if
needed.
Reduces total execution time from 1m27s to 56s.
Tested on x86_64-linux.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/gdb.threads/detach-step-over.exp | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/gdb/testsuite/gdb.threads/detach-step-over.exp b/gdb/testsuite/gdb.threads/detach-step-over.exp index 38d7966..6c3a74f 100644 --- a/gdb/testsuite/gdb.threads/detach-step-over.exp +++ b/gdb/testsuite/gdb.threads/detach-step-over.exp @@ -187,10 +187,6 @@ proc prepare_test_iter {testpid non_stop attempt attempts tid_re} { } } - # Wait a bit, to give time for the threads to hit the - # breakpoint. - sleep 1 - return true } @@ -233,7 +229,8 @@ proc_with_prefix test_detach_command {condition_eval target_non_stop non_stop di set running_count 0 set interrupted 0 - gdb_test_multiple "info threads" "all threads running" { + set running_expected [expr ($::n_threads + 1) * 2] + gdb_test_multiple "info threads" "threads running" { -re "\\(running\\)" { incr running_count exp_continue @@ -254,10 +251,31 @@ proc_with_prefix test_detach_command {condition_eval target_non_stop non_stop di } } } - -re "$::gdb_prompt $" { - gdb_assert {$running_count == ($::n_threads + 1) * 2} \ - $gdb_test_name + -re "$::gdb_prompt " { + } + } + + if { !$interrupted } { + set iterations 0 + set max_iterations 10 + while { $running_count < $running_expected } { + sleep 1 + set running_count 0 + gdb_test_multiple "info threads" "threads running" { + -re "\\(running\\)" { + incr running_count + exp_continue + } + -re "$::gdb_prompt " { + } + } + incr iterations + if { $iterations == $max_iterations } { + break + } } + gdb_assert {$running_count == $running_expected} \ + "all threads running" } gdb_test "detach" "Detaching from.*" |