[PATCH 12/14] manythreads.exp: Adjust to handle threads appearing/disappearing after "Program received signal SIGFOO"

Yao Qi
2012-05-03T13:13:19Z

From: Pedro Alves <pedro@codesourcery.com>

As infrun only decides to stop or not all threads after handling the
event the target reported, threads can now appear or disappear after
"Program received signal SIGFOO" and presenting the prompt, which
breaks the manythreads.exp test. This fixes it.

v2:

- "stop threads 1" test needed adjustment too.

gdb/testsuite/
2011-12-16 Pedro Alves <pedro@codesourcery.com>

* gdb.threads/manythreads.exp: Don't assume threads can't appear
or disappear after printing "Program received signal ".
---
gdb/testsuite/gdb.threads/manythreads.exp | 68 +++++++++++++++++++++++------
1 files changed, 54 insertions(+), 14 deletions(-)

diff --git a/gdb/testsuite/gdb.threads/manythreads.exp b/gdb/testsuite/gdb.threads/manythreads.exp
index 42333e6..83d1a9b 100644
--- a/gdb/testsuite/gdb.threads/manythreads.exp
+++ b/gdb/testsuite/gdb.threads/manythreads.exp
@@ -49,6 +49,22 @@ gdb_test_multiple "continue" "first continue" {
}
}

+
+# Note that in the tests below, we can't suffix the "Program received
+# signal SIGINT" regexes with $gdb_prompt, as doing so would mean that
+# e.g. with,
+#
+# Program received signal SIGINT, Interrupt.
+# [New Thread FOO]
+# [Switching to Thread BAR]
+# 0xdeadbeef in bar () from bar.so
+# (gdb)
+#
+# the [New ...] or [... exited] regexes would eat the "Program
+# received ..." bit. [New FOO] and [FOO exited] may appear while GDB
+# is stopping threads.
+
+
# Wait one second. This is better than the TCL "after" command, because
# we don't lose GDB's output while we do it.
remote_expect host 1 { timeout { } }
@@ -57,6 +73,17 @@ remote_expect host 1 { timeout { } }
send_gdb "\003"
set message "stop threads 1"
gdb_test_multiple "" "stop threads 1" {
+ -re "Program received signal SIGINT" {
+ # Eat the prompt.
+ gdb_expect {
+ -re "$gdb_prompt $" {
+ pass "$message"
+ }
+ timeout {
+ fail "$message (timeout)"
+ }
+ }
+ }
-re "\\\[New \[^\]\]*\\\]\r\n" {
exp_continue
}
@@ -66,9 +93,6 @@ gdb_test_multiple "" "stop threads 1" {
-re "Thread \[^\n\]* executing\r\n" {
exp_continue
}
- -re "Program received signal SIGINT.*$gdb_prompt $" {
- pass "$message"
- }
timeout {
fail "$message (timeout)"
}
@@ -111,6 +135,21 @@ gdb_test_multiple "continue" "second continue" {
# to handle duplicate SIGINTs sent to multiple threads.
set failed 0
remote_expect host 1 {
+ -re "Program received signal SIGINT" {
+
+ # Eat the prompt.
+ gdb_expect {
+ -re "$gdb_prompt $" {
+ }
+ }
+
+ if { $failed == 0 } {
+ fail "check for duplicate SIGINT"
+ }
+ send_gdb "continue\n"
+ set failed 1
+ exp_continue
+ }
-re "\\\[New \[^\]\]*\\\]\r\n" {
exp_continue -continue_timer
}
@@ -120,14 +159,6 @@ remote_expect host 1 {
-re "Thread \[^\n\]* executing\r\n" {
exp_continue -continue_timer
}
- -re "Program received signal SIGINT.*$gdb_prompt $" {
- if { $failed == 0 } {
- fail "check for duplicate SIGINT"
- }
- send_gdb "continue\n"
- set failed 1
- exp_continue
- }
timeout {
if { $failed == 0 } {
pass "check for duplicate SIGINT"
@@ -139,6 +170,18 @@ remote_expect host 1 {
send_gdb "\003"
set message "stop threads 2"
gdb_test_multiple "" "stop threads 2" {
+ -re "Program received signal SIGINT" {
+
+ # Eat the prompt.
+ gdb_expect {
+ -re "$gdb_prompt $" {
+ pass "$message"
+ }
+ timeout {
+ fail "$message (timeout)"
+ }
+ }
+ }
-re "\\\[New \[^\]\]*\\\]\r\n" {
exp_continue
}
@@ -148,9 +191,6 @@ gdb_test_multiple "" "stop threads 2" {
-re "Thread \[^\n\]* executing\r\n" {
exp_continue
}
- -re "Program received signal SIGINT.*$gdb_prompt $" {
- pass "$message"
- }
timeout {
fail "$message (timeout)"
}
--
1.7.0.4