Fix 'gdb.base/quit.exp hangs forever' if the test fails
authorPedro Alves <palves@redhat.com>
Fri, 20 Oct 2017 14:33:57 +0000 (15:33 +0100)
committerPedro Alves <palves@redhat.com>
Fri, 20 Oct 2017 14:33:57 +0000 (15:33 +0100)
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.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/quit.exp

index 6a984aee8ba5ee5238fbf38aece58a71b2fad69d..de0b7bd75a48d5718f6c8e7f2d22573183043a06 100644 (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>
 
        * gdb.linespec/ls-errs.exp (do_test): Update comment, use line
index c81040ed567d2942b2d2e0ca5e248be9dccede32..b2ecc220ca5ef4c05c1a35659276817c2dd0d363 100644 (file)
@@ -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
This page took 0.036401 seconds and 4 git commands to generate.