From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11228 invoked by alias); 4 Dec 2014 15:35:10 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 11214 invoked by uid 89); 4 Dec 2014 15:35:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_HELO_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; Thu, 04 Dec 2014 15:35:09 +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 sB4FZ3pi025817 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 4 Dec 2014 10:35:04 -0500 Received: from [127.0.0.1] (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 sB4FZ2Sm022874; Thu, 4 Dec 2014 10:35:02 -0500 Message-ID: <54807F25.9040506@redhat.com> Date: Thu, 04 Dec 2014 15:35:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: Simon Marchi , gdb-patches@sourceware.org Subject: Re: [PATCH v2] Restore terminal state in mi_thread_exit (PR gdb/17627) References: <1417558223-27328-1-git-send-email-simon.marchi@ericsson.com> In-Reply-To: <1417558223-27328-1-git-send-email-simon.marchi@ericsson.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2014-12/txt/msg00093.txt.bz2 On 12/02/2014 10:10 PM, Simon Marchi wrote: > When a thread exits, the terminal is left in mode "terminal_is_ours" > while the target executes. This patch fixes that. Right. The reason we can then type stuff is that the input fd is left registered in the event loop. target_terminal_inferior is what removes it. > > From my understanding, a function calling target_terminal_ours expects > that the terminal could be in any state at the moment it is called. Right. The target_terminal_* functions are idempotent. > Therefore, it should be its reponsibility to put back the terminal in > whatever state it was before being called. That doesn't follow though. We have a ton of places that call target_terminal_our that don't need to put back the terminal in whatever state is was before. The reason is that usually we'll be printing after the inferior stopped for some event. If we end up re-resuming it, we'll call target_terminal_inferior then. But in the thread exit case, there's nothing to be re-resumed, so we need to care about it "manually". If you take a backtrace at the point the thread exit event is printed, we should be still deep within the target backend code. Please update the commit log to clarify this. > extern int target_supports_terminal_ours (void); > > +/* Make a cleanup that restores the state of the terminal to the current > + value. */ Should be "to the current state", I think. Otherwise OK. Thanks, Pedro Alves