From 97dfbaddad2b5acf3dd9f2c3e0135b89bde1cbf8 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 7 Apr 2019 16:31:01 -0600 Subject: [PATCH] Use std::list for remote_notif_state::notif_queue This changes remote_notif_state::notif_queue to be a std::list and updates all the uses. gdb/ChangeLog 2019-04-19 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/ChangeLog b/gdb/ChangeLog index ac56b0957f..ac16a7bc7b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2019-04-19 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. + 2019-04-19 Tom Tromey * symfile.c (reread_symbols): Update. diff --git a/gdb/remote-notif.c b/gdb/remote-notif.c index eece947006..2680618b3f 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 87b52a18f9..f9b0b2c618 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 69b479b40c..5e5fbbf8c3 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -4052,7 +4052,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. */