From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23513 invoked by alias); 28 Aug 2012 13:40:15 -0000 Received: (qmail 23499 invoked by uid 22791); 28 Aug 2012 13:40:13 -0000 X-SWARE-Spam-Status: No, hits=-7.7 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,SPF_HELO_PASS 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; Tue, 28 Aug 2012 13:39:53 +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 q7SDdrP7024447 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 28 Aug 2012 09:39:53 -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 q7SDdpTR030563; Tue, 28 Aug 2012 09:39:52 -0400 Message-ID: <503CCA27.7070607@redhat.com> Date: Tue, 28 Aug 2012 13:40:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120717 Thunderbird/14.0 MIME-Version: 1.0 To: Yao Qi CC: Vladimir Prus , gdb-patches@sources.redhat.com Subject: Re: [PATCH 3/3] suppress notification References: <1346060757-30130-1-git-send-email-yao@codesourcery.com> <1346060757-30130-4-git-send-email-yao@codesourcery.com> <503C7A1D.6040909@codesourcery.com> <503CB1F0.3020009@cs.msu.su> <503CC302.8060900@codesourcery.com> In-Reply-To: <503CC302.8060900@codesourcery.com> Content-Type: text/plain; charset=ISO-8859-1 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-08/txt/msg00829.txt.bz2 On 08/28/2012 02:09 PM, Yao Qi wrote: > On 08/28/2012 07:56 PM, Vladimir Prus wrote: >> Well, the problem is that this is not a generic mechanism to everybody >> to know whether command X is presently running -- because >> this mechanism can set only one variable, and for some commands that >> variable is already notification flag. >> > > If we want to know whether command X is running, we can add more fields in 'struct mi_suppress_notification', and each field is associated with one command in this way (set 'called' point to the address of field in 'struct mi_suppress_notificatin'). It is unnecessary according to current requirement, and it can evolve easily once we have such requirement in the future. > >>> If you still think it is misleading, I'd like to rename variable >>> 'mi_suppress_notification' to 'mi_cmd_called'. WDYT? >> >> Would that be any better than just storing the name of current command >> and check it with strcmp? Yeah, we're back to where >> we've started. What is the problem we're trying to solve? That strcmp is >> ugly to type and not entirely efficient? > > I am adding some MI notifications, which should be suppressed. The problem I have is that we'll have a very long 'if/else if/else if/.../' blocks to compare command name to determine which suppress flag to set. The code smell is not good to me. So I draft these patches to change it. Alternatively, set the notification suppression down in the command callback itself. I mention it for completeness. Maybe you've considered it, and decided against it. > > Ideally, we can do this in a more-OO'ed manner, > > 1 add a new field 'int called' in 'struct mi_cmd', > 2 set 'parse->cmd->called' in mi_cmd_execute to 1 and set it back to 0 when it is done. > 3 pass 'struct mi_cmd *' to each MI command function, for example change function mi_breakpoint_created to > > mi_breakpoint_created (struct mi_cmd *self, struct breakpoint *b) > > 4 inside each MI command function, return early if self->called is 1. Then, we can get rid of mi_suppress_notification completely. Confused. mi_breakpoint_created is not a MI command function, but rather a notification observer. Whoever calls the observers (observer_notify_breakpoint_created) is disconnected from commands, and I don't see that the coupling would be a good idea. > > This will lead to more changes, so I don't implement it. If it is acceptable to you, I can go to this way. > -- Pedro Alves