mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 02:24:46 +08:00
[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:
parent
c3efaf0afd
commit
832a980e17
@ -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} {
|
||||
|
Loading…
Reference in New Issue
Block a user