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.
This commit is contained in:
parent
b494cdff69
commit
97dfbaddad
@ -1,3 +1,15 @@
|
||||
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.
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user