summaryrefslogtreecommitdiff
path: root/gdb/testsuite
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2022-12-16 15:28:27 +0100
committerTom de Vries <tdevries@suse.de>2022-12-16 15:28:27 +0100
commit832a980e1725a4a7fa527f2dcd92a64d7e68ab0f (patch)
treee9b093bcdef66a36b675874c42cd25e9bb38febe /gdb/testsuite
parentc3efaf0afd9d37004c42cdfd3ce0c1bfa979c45e (diff)
downloadbinutils-gdb-832a980e1725a4a7fa527f2dcd92a64d7e68ab0f.tar.gz
[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/testsuite')
-rw-r--r--gdb/testsuite/gdb.threads/detach-step-over.exp34
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 38d796620cb..6c3a74fd16d 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.*"