From patchwork Tue Apr 21 18:08:10 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 6350 Received: (qmail 92274 invoked by alias); 21 Apr 2015 18:08:39 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 92157 invoked by uid 89); 21 Apr 2015 18:08:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, SPF_HELO_PASS, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 21 Apr 2015 18:08:37 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t3LI8aOQ017596 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Tue, 21 Apr 2015 14:08:36 -0400 Received: from brno.lan (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t3LI8WKq028722 for ; Tue, 21 Apr 2015 14:08:36 -0400 From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 03/24] Fix gdb.base/interrupt.exp racy fail against gdbserver Date: Tue, 21 Apr 2015 19:08:10 +0100 Message-Id: <1429639711-16459-4-git-send-email-palves@redhat.com> In-Reply-To: <1429639711-16459-1-git-send-email-palves@redhat.com> References: <1429639711-16459-1-git-send-email-palves@redhat.com> 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-21 Pedro Alves * gdb.base/interrupt.exp: Rename saw_eof to saw_end_of_file. Use an indirect spawn id list holding $inferior_spawn_id instead of $inferior_spawn_id directly. On "of of file", remove $inferior_spawn_id from the indirect list. --- gdb/testsuite/gdb.base/interrupt.exp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) 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 } }