This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Fix 'gdb.base/quit.exp hangs forever' if the test fails
- From: Pedro Alves <palves at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Tue, 17 Oct 2017 18:26:17 +0100
- Subject: [PATCH] Fix 'gdb.base/quit.exp hangs forever' if the test fails
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=palves at redhat dot com
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 3DC06C04B92C
The [wait -i $gdb_spawn_id] in the test is dangerous in the sense that
it won't be subject to timeout logic. So if GDB fails quiting, this
testcase hangs forever, hanging the test run with it. See:
https://sourceware.org/ml/gdb-patches/2016-10/msg00728.html
Instead of 'wait'ing directly, use gdb_test_multiple and expect 'eof'.
Tested that the testcase no longer hangs by hacking the test to send
"info threads" instead of "quit".
Tested with
--target_board={unix, native-gdbserver,native-extended-gdbserver}
and tested with
--host_board=local-remote-host
as well.
gdb/testsuite/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* gdb.base/quit.exp: Use gdb_test_multiple and expect 'eof' before
'wait -i'. Use gdb_assert and remote_close.
---
gdb/testsuite/gdb.base/quit.exp | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/gdb/testsuite/gdb.base/quit.exp b/gdb/testsuite/gdb.base/quit.exp
index c81040e..b2ecc22 100644
--- a/gdb/testsuite/gdb.base/quit.exp
+++ b/gdb/testsuite/gdb.base/quit.exp
@@ -23,13 +23,15 @@ gdb_test "quit()" "A syntax error in expression, near .*" \
"quit with syntax error"
# Test that an expression can be used to set the error code.
-send_gdb "quit 22+1\n"
-set result [wait -i $gdb_spawn_id]
-verbose $result
-if {[lindex $result 2] == 0 && [lindex $result 3] == 23} {
- pass "quit with expression"
-} else {
- fail "quit with expression"
+
+set test "quit with expression"
+gdb_test_multiple "quit 22+1" $test {
+ eof {
+ set result [wait -i $gdb_spawn_id]
+ verbose $result
+ gdb_assert {[lindex $result 2] == 0 && [lindex $result 3] == 23} $test
+
+ remote_close host
+ clear_gdb_spawn_id
+ }
}
-close $gdb_spawn_id
-clear_gdb_spawn_id
--
2.5.5