fb3f526245
- 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
77 lines
2.2 KiB
Diff
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.*"
|
|
|