[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.
This commit is contained in:
Tom de Vries 2022-12-16 15:28:27 +01:00
parent c3efaf0afd
commit 832a980e17

View File

@ -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,12 +251,33 @@ 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.*"
if {!$interrupted} {