gdb/gdb-testsuite-fix-race-in-gdb.threads-detach-step-over.exp.patch
Tom de Vries fb3f526245 - Maintenance script qa.sh:
- Add KFAIL.
- Patches updated (increase sleep time):
  * gdb-testsuite-fix-race-in-gdb.threads-detach-step-over.exp.patch
- Patches added (debug hard to reproduce failure):
  * gdb-testsuite-debug-gdb.arch-i386-sse.exp.patch

OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gdb?expand=0&rev=305
2021-11-18 17:38:55 +00:00

77 lines
2.2 KiB
Diff

gdb-testsuite-fix-race-in-gdb.threads-detach-step-over.exp
[gdb/testsuite] Fix race in gdb.threads/detach-step-over.exp
On OBS with openSUSE Leap 15.2 and target board unix/m32, 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
...
I can easily reproduce this by doing:
...
# Wait a bit, to give time for the threads to hit the
# breakpoint.
- sleep 1
set running_count 0
set interrupted 0
...
Fix this by counting the running threads in a loop.
Tested on x86_64-linux.
---
gdb/testsuite/gdb.threads/detach-step-over.exp | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/gdb/testsuite/gdb.threads/detach-step-over.exp b/gdb/testsuite/gdb.threads/detach-step-over.exp
index 27718551188..d6fba07b486 100644
--- a/gdb/testsuite/gdb.threads/detach-step-over.exp
+++ b/gdb/testsuite/gdb.threads/detach-step-over.exp
@@ -203,7 +203,8 @@ proc test {condition_eval target_non_stop non_stop displaced} {
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
@@ -224,10 +225,29 @@ proc test {condition_eval target_non_stop non_stop displaced} {
}
}
}
- -re "$gdb_prompt $" {
- gdb_assert {$running_count == ($n_threads + 1) * 2} $gdb_test_name
+ -re "$gdb_prompt " {
}
}
+ if { $interrupted == 0 } {
+ while { $running_count < $running_expected } {
+ sleep 10
+ set prev_running_count $running_count
+ set running_count 0
+ gdb_test_multiple "info threads" "threads running" {
+ -re "\\(running\\)" {
+ incr running_count
+ exp_continue
+ }
+ -re "$gdb_prompt $" {
+ }
+ }
+ if { $running_count == $prev_running_count } {
+ break
+ }
+ }
+ gdb_assert {$running_count == $running_expected} \
+ "all threads running"
+ }
gdb_test "detach" "Detaching from.*"