From patchwork Mon Apr 8 00:20:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 32198 Received: (qmail 79251 invoked by alias); 8 Apr 2019 00:21:07 -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 79128 invoked by uid 89); 8 Apr 2019 00:21:07 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=STATE, Query, unchanged X-HELO: gateway22.websitewelcome.com Received: from gateway22.websitewelcome.com (HELO gateway22.websitewelcome.com) (192.185.46.142) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 08 Apr 2019 00:21:04 +0000 Received: from cm17.websitewelcome.com (cm17.websitewelcome.com [100.42.49.20]) by gateway22.websitewelcome.com (Postfix) with ESMTP id 73E5810F3E for ; Sun, 7 Apr 2019 19:21:01 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id DI21hb6FX90onDI21hnxCW; Sun, 07 Apr 2019 19:21:01 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Sc+SHGPOSnmCmGovZxRROwUNyBUbeoZnhAr0FB61ilI=; b=OJTGNtu8ckQsP63qiEDaX7Jelm R21amkHxf30I5aF/Vw6jLWXvxLA9jzURJt6qOJEFM1g9nxGqQcJ6qIz7vwjy3L7RRqKqzp5uHFFpW YMARQ6avJd4DKnSj7xDvKUosR; Received: from 174-29-37-56.hlrn.qwest.net ([174.29.37.56]:54032 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.91) (envelope-from ) id 1hDI21-000TDz-8O; Sun, 07 Apr 2019 19:21:01 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 2/4] Use std::list for remote_notif_state::notif_queue Date: Sun, 7 Apr 2019 18:20:56 -0600 Message-Id: <20190408002058.10793-3-tom@tromey.com> In-Reply-To: <20190408002058.10793-1-tom@tromey.com> References: <20190408002058.10793-1-tom@tromey.com> This changes remote_notif_state::notif_queue to be a std::list and updates all the uses. gdb/ChangeLog 2019-04-07 Tom Tromey * remote.c (remote_target): Use delete. * remote-notif.h: Include , not "common/queue.h". (notif_client_p): Remove typedef. (remote_notif_state): Add constructor, destructor, initializer. : Now a std::list. (remote_notif_state_xfree): Don't declare. * remote-notif.c (remote_notif_process, handle_notification) (remote_notif_state_allocate): Update. (~remote_notif_state): Rename from remote_notif_state_xfree. --- gdb/ChangeLog | 12 ++++++++++++ gdb/remote-notif.c | 27 +++++++++------------------ gdb/remote-notif.h | 30 ++++++++++++++++-------------- gdb/remote.c | 2 +- 4 files changed, 38 insertions(+), 33 deletions(-) diff --git a/gdb/remote-notif.c b/gdb/remote-notif.c index eece9470061..2680618b3fa 100644 --- a/gdb/remote-notif.c +++ b/gdb/remote-notif.c @@ -85,8 +85,6 @@ remote_notif_parse (remote_target *remote, return event.release (); } -DEFINE_QUEUE_P (notif_client_p); - /* Process notifications in STATE's notification queue one by one. EXCEPT is not expected in the queue. */ @@ -94,10 +92,10 @@ void remote_notif_process (struct remote_notif_state *state, struct notif_client *except) { - while (!QUEUE_is_empty (notif_client_p, state->notif_queue)) + while (!state->notif_queue.empty ()) { - struct notif_client *nc = QUEUE_deque (notif_client_p, - state->notif_queue); + struct notif_client *nc = state->notif_queue.front (); + state->notif_queue.pop_front (); gdb_assert (nc != except); @@ -158,7 +156,7 @@ handle_notification (struct remote_notif_state *state, const char *buf) /* Notify the event loop there's a stop reply to acknowledge and that there may be more events to fetch. */ - QUEUE_enque (notif_client_p, state->notif_queue, nc); + state->notif_queue.push_back (nc); if (target_is_non_stop_p ()) { /* In non-stop, We mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN @@ -212,12 +210,10 @@ handle_notification (struct remote_notif_state *state, const char *buf) struct remote_notif_state * remote_notif_state_allocate (remote_target *remote) { - struct remote_notif_state *notif_state = XCNEW (struct remote_notif_state); + struct remote_notif_state *notif_state = new struct remote_notif_state; notif_state->remote = remote; - notif_state->notif_queue = QUEUE_alloc (notif_client_p, NULL); - /* Register async_event_handler for notification. */ notif_state->get_pending_events_token @@ -229,21 +225,16 @@ remote_notif_state_allocate (remote_target *remote) /* Free STATE and its fields. */ -void -remote_notif_state_xfree (struct remote_notif_state *state) +remote_notif_state::~remote_notif_state () { int i; - QUEUE_free (notif_client_p, state->notif_queue); - /* Unregister async_event_handler for notification. */ - if (state->get_pending_events_token != NULL) - delete_async_event_handler (&state->get_pending_events_token); + if (get_pending_events_token != NULL) + delete_async_event_handler (&get_pending_events_token); for (i = 0; i < REMOTE_NOTIF_LAST; i++) - delete state->pending_event[i]; - - xfree (state); + delete pending_event[i]; } void diff --git a/gdb/remote-notif.h b/gdb/remote-notif.h index 87b52a18f9e..f9b0b2c6180 100644 --- a/gdb/remote-notif.h +++ b/gdb/remote-notif.h @@ -20,8 +20,8 @@ #ifndef REMOTE_NOTIF_H #define REMOTE_NOTIF_H +#include #include -#include "common/queue.h" /* An event of a type of async remote notification. */ @@ -48,7 +48,7 @@ struct remote_target; /* A client to a sort of async remote notification. */ -typedef struct notif_client +struct notif_client { /* The name of notification packet. */ const char *name; @@ -79,20 +79,23 @@ typedef struct notif_client /* Id of this notif_client. */ const enum REMOTE_NOTIF_ID id; -} *notif_client_p; - -DECLARE_QUEUE_P (notif_client_p); +}; /* State on remote async notification. */ struct remote_notif_state { + remote_notif_state () = default; + ~remote_notif_state (); + + DISABLE_COPY_AND_ASSIGN (remote_notif_state); + /* The remote target. */ remote_target *remote; /* Notification queue. */ - QUEUE(notif_client_p) *notif_queue; + std::list notif_queue; /* Asynchronous signal handle registered as event loop source for when the remote sent us a notification. The registered callback @@ -101,14 +104,14 @@ struct remote_notif_state struct async_event_handler *get_pending_events_token; -/* One pending event for each notification client. This is where we - keep it until it is acknowledged. When there is a notification - packet, parse it, and create an object of 'struct notif_event' to - assign to it. This field is unchanged until GDB starts to ack - this notification (which is done by - remote.c:remote_notif_pending_replies). */ + /* One pending event for each notification client. This is where we + keep it until it is acknowledged. When there is a notification + packet, parse it, and create an object of 'struct notif_event' to + assign to it. This field is unchanged until GDB starts to ack + this notification (which is done by + remote.c:remote_notif_pending_replies). */ - struct notif_event *pending_event[REMOTE_NOTIF_LAST]; + struct notif_event *pending_event[REMOTE_NOTIF_LAST] {}; }; void remote_notif_ack (remote_target *remote, notif_client *nc, @@ -123,7 +126,6 @@ void handle_notification (struct remote_notif_state *notif_state, void remote_notif_process (struct remote_notif_state *state, struct notif_client *except); remote_notif_state *remote_notif_state_allocate (remote_target *remote); -void remote_notif_state_xfree (struct remote_notif_state *state); extern struct notif_client notif_client_stop; diff --git a/gdb/remote.c b/gdb/remote.c index 657a4a25cac..41ec9b9bb70 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -4050,7 +4050,7 @@ remote_target::~remote_target () if (rs->remote_async_inferior_event_token) delete_async_event_handler (&rs->remote_async_inferior_event_token); - remote_notif_state_xfree (rs->notif_state); + delete rs->notif_state; } /* Query the remote side for the text, data and bss offsets. */