diff options
author | Tom Tromey <tom@tromey.com> | 2019-04-07 16:31:01 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-04-19 14:29:33 -0600 |
commit | 97dfbaddad2b5acf3dd9f2c3e0135b89bde1cbf8 (patch) | |
tree | a41bf581ac78fbae6542524a3a7e3b2543081d64 | |
parent | b494cdff6922944383ef4dc20fcc90c4d823d315 (diff) | |
download | gdb-97dfbaddad2b5acf3dd9f2c3e0135b89bde1cbf8.zip gdb-97dfbaddad2b5acf3dd9f2c3e0135b89bde1cbf8.tar.gz gdb-97dfbaddad2b5acf3dd9f2c3e0135b89bde1cbf8.tar.bz2 |
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 <tom@tromey.com>
* remote.c (remote_target): Use delete.
* remote-notif.h: Include <list>, not "common/queue.h".
(notif_client_p): Remove typedef.
(remote_notif_state): Add constructor, destructor, initializer.
<notif_queue>: 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.
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/remote-notif.c | 27 | ||||
-rw-r--r-- | gdb/remote-notif.h | 30 | ||||
-rw-r--r-- | gdb/remote.c | 2 |
4 files changed, 38 insertions, 33 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ac56b09..ac16a7b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,17 @@ 2019-04-19 Tom Tromey <tom@tromey.com> + * remote.c (remote_target): Use delete. + * remote-notif.h: Include <list>, not "common/queue.h". + (notif_client_p): Remove typedef. + (remote_notif_state): Add constructor, destructor, initializer. + <notif_queue>: 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 <tom@tromey.com> + * symfile.c (reread_symbols): Update. * objfiles.c (objfile_register_static_link) (objfile_lookup_static_link): Update diff --git a/gdb/remote-notif.c b/gdb/remote-notif.c index eece947..2680618 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 87b52a1..f9b0b2c 100644 --- a/gdb/remote-notif.h +++ b/gdb/remote-notif.h @@ -20,8 +20,8 @@ #ifndef REMOTE_NOTIF_H #define REMOTE_NOTIF_H +#include <list> #include <memory> -#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_client *> 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 69b479b..5e5fbbf 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. */ |