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  <palves@redhat.com>

	* gdb.base/quit.exp: Use gdb_test_multiple and expect 'eof' before
	'wait -i'.  Use gdb_assert and remote_close.
This commit is contained in:
Pedro Alves 2017-10-20 15:33:57 +01:00
parent fcc8fb2f3d
commit 15763a09d4
2 changed files with 16 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2017-10-20 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.
2017-10-19 Andrew Burgess <andrew.burgess@embecosm.com> 2017-10-19 Andrew Burgess <andrew.burgess@embecosm.com>
* gdb.linespec/ls-errs.exp (do_test): Update comment, use line * gdb.linespec/ls-errs.exp (do_test): Update comment, use line

View File

@ -23,13 +23,15 @@ gdb_test "quit()" "A syntax error in expression, near .*" \
"quit with syntax error" "quit with syntax error"
# Test that an expression can be used to set the error code. # 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] set test "quit with expression"
verbose $result gdb_test_multiple "quit 22+1" $test {
if {[lindex $result 2] == 0 && [lindex $result 3] == 23} { eof {
pass "quit with expression" set result [wait -i $gdb_spawn_id]
} else { verbose $result
fail "quit with expression" 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