This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix 'gdb.base/quit.exp hangs forever' if the test fails


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=15763a09d4aea85fc3153d6746c040dd48565637

commit 15763a09d4aea85fc3153d6746c040dd48565637
Author: Pedro Alves <palves@redhat.com>
Date:   Fri Oct 20 15:33:57 2017 +0100

    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.

Diff:
---
 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 6a984ae..de0b7bd 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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
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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]