From 15763a09d4aea85fc3153d6746c040dd48565637 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 20 Oct 2017 15:33:57 +0100 Subject: [PATCH] Fix 'gdb.base/quit.exp hangs forever' if the test fails 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: 2017-10-20 Pedro Alves * gdb.base/quit.exp: Use gdb_test_multiple and expect 'eof' before 'wait -i'. Use gdb_assert and remote_close. --- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.base/quit.exp | 20 +++++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 6a984aee8b..de0b7bd75a 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-10-20 Pedro Alves + + * gdb.base/quit.exp: Use gdb_test_multiple and expect 'eof' before + 'wait -i'. Use gdb_assert and remote_close. + 2017-10-19 Andrew Burgess * gdb.linespec/ls-errs.exp (do_test): Update comment, use line diff --git a/gdb/testsuite/gdb.base/quit.exp b/gdb/testsuite/gdb.base/quit.exp index c81040ed56..b2ecc220ca 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.34.1