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/interrupt.exp racy fail against gdbserver


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

commit 4ef9fb2f075daec3885c63aa2056075bdd94384b
Author: Pedro Alves <palves@redhat.com>
Date:   Thu Apr 23 15:48:27 2015 +0100

    Fix gdb.base/interrupt.exp racy fail against gdbserver
    
    Currently, against gdbserver, interrupt.exp occasionaly fails like
    this:
    
     ERROR: Process no longer exists
     UNRESOLVED: gdb.base/interrupt.exp: send end of file
    
    The problem is that we see gdbserver exiting before we match gdb's
    output:
    
     expect: does "\r\n\r\nChild exited with status 0\r\nGDBserver exiting\r\n" (spawn_id exp8) match regular expression "end of file"? Gate "end of file"? gate=no
     expect: read eof
     expect: set expect_out(spawn_id) "exp8"
     expect: set expect_out(buffer) "\r\n\r\nChild exited with status 0\r\nGDBserver exiting\r\n"
    
    Fix this by removing $inferior_spawn_id from the set of spawn ids
    expect is watching as soon as we see the "end of file" string out of
    the inferior spawn id, using an indirect spawn id list.
    
    Tested on x86-64 Fedora 20, native and gdbserver (both target remote
    and extended-remote).
    
    gdb/testsuite/ChangeLog:
    2015-04-23  Pedro Alves  <palves@redhat.com>
    
    	* gdb.base/interrupt.exp: Use an indirect spawn id list holding
    	$inferior_spawn_id instead of $inferior_spawn_id directly.  On
    	"end of file", remove $inferior_spawn_id from the indirect list.

Diff:
---
 gdb/testsuite/ChangeLog              |  6 ++++++
 gdb/testsuite/gdb.base/interrupt.exp | 13 +++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 71fdd48..1d5820b 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,11 @@
 2015-04-23  Pedro Alves  <palves@redhat.com>
 
+	* gdb.base/interrupt.exp: Use an indirect spawn id list holding
+	$inferior_spawn_id instead of $inferior_spawn_id directly.  On
+	"end of file", remove $inferior_spawn_id from the indirect list.
+
+2015-04-23  Pedro Alves  <palves@redhat.com>
+
 	* gdb.base/interrupt.exp: Rename saw_eof to saw_end_of_file.
 
 2015-04-23  Pedro Alves  <palves@redhat.com>
diff --git a/gdb/testsuite/gdb.base/interrupt.exp b/gdb/testsuite/gdb.base/interrupt.exp
index 17a9bad..f594ba4 100644
--- a/gdb/testsuite/gdb.base/interrupt.exp
+++ b/gdb/testsuite/gdb.base/interrupt.exp
@@ -205,12 +205,21 @@ if ![file exists $binfile] then {
 
 	set msg "send end of file"
 	send_inferior "\004"
+
+	set spawn_list "$inferior_spawn_id"
+
 	gdb_test_multiple "" $msg {
-	    -i $inferior_spawn_id -re "end of file" {
-		verbose -log "saw \"end of file\": $saw_end_of_file"
+	    -i spawn_list -re "end of file" {
 		set saw_end_of_file 1
 		verbose -log "saw \"end of file\""
 		if {!$saw_inferior_exit} {
+		    # When $inferior_spawn_id != $gdb_spawn_id, such
+		    # as when testing with gdbserver, we may see the
+		    # eof (the process exit, not the string just
+		    # matched) for $inferior_spawn_id before the
+		    # expected gdb output.  Clear this so we no longer
+		    # expect anything out of $inferior_spawn_id.
+		    set spawn_list ""
 		    exp_continue
 		}
 	    }


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