From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9972 invoked by alias); 15 Jun 2012 19:25:00 -0000 Received: (qmail 9962 invoked by uid 22791); 15 Jun 2012 19:24:58 -0000 X-SWARE-Spam-Status: No, hits=-7.4 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,TW_CP,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 15 Jun 2012 19:24:38 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q5FJOY1R024369 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 15 Jun 2012 15:24:34 -0400 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q5FJOXpX011915; Fri, 15 Jun 2012 15:24:33 -0400 Message-ID: <4FDB8BF0.4050502@redhat.com> Date: Fri, 15 Jun 2012 19:25:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120430 Thunderbird/12.0.1 MIME-Version: 1.0 To: Yao Qi CC: gdb-patches@sourceware.org Subject: Re: [PATCH 3/4] New agent command 'kill' and used by gdbserver References: <1339246002-1987-1-git-send-email-yao@codesourcery.com> <1339246002-1987-4-git-send-email-yao@codesourcery.com> <4FD76ADB.7090302@redhat.com> <201206142250.01331.yao@codesourcery.com> In-Reply-To: <201206142250.01331.yao@codesourcery.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit 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 X-SW-Source: 2012-06/txt/msg00525.txt.bz2 On 06/14/2012 03:50 PM, Yao Qi wrote: > On Wednesday 13 June 2012 00:14:19 Pedro Alves wrote: >>> > > + run_inferior_command ("kill", strlen ("kill")); >> > >> > - Missing space before parens. >> > >> > - What happens if there's no IPA to talk to? >> > >> > - Also, all callers of run_inferior_command command currently >> > pass "cmd, strlen (cmd) + 1". >> > >> > - The kill_inferior function takes a PID as argument. It's not >> > right to assume that PID is the current process. IOW, in a >> > multi-process scenario, you may well run the inferior command >> > on the wrong inferior as is. > This new patch addresses all your comments except this one above. IMO, the > whole agent work in GDBserver doesn't consider much about multi-process, so > this problem shall be addressed as a whole, when we start to support agent in > multi-process. I leave a FIXME in comment there. WDYT? I'd really rather see that fixed now. Even with single process, you may get here without a selected inferior at all. We just need to lookup a thread of PID, and select it as current_inferior for the duration of run_inferior_command, I think? (wrapped with the save_inferior dance). > +int > +kill_inferior (int pid) > +{ > + char buf[IPA_CMD_BUF_SIZE]; > + > + if (!maybe_write_ipa_not_loaded (buf)) > + { > + strcpy (buf, "close"); > + /* FIXME: It is wrong to assume PID is the current process. In > + a multiple-process scenario, we may run inferior command on > + the wrong process. */ > + run_inferior_command (buf, strlen (buf) + 1); > + } I'd rather have this whole block be factored out to a function in tracepoint.c (tracepoint_about_to_kill for example). More so with a fix to set current_inferior around run_inferior_command. Then we wouldn't have to export details of the IPA, such as maybe_write_ipa_not_loaded or run_inferior_command. -- Pedro Alves