Re: [PATCH 14/16] move async_client_callback and async_client_context into remote_state

Pedro Alves
2013-06-24T17:32:07Z

On 06/21/2013 06:25 PM, Tom Tromey wrote:
> This moves async_client_callback and async_client_context into
> remote_state.
>
> * remote.c (struct remote_state) <async_client_callback,
> async_client_context>: New fields.
> (async_client_callback, async_client_context): Remove.
> (record_currthread, set_thread, set_general_process)

This line looks a pasto from another patch.

> (remote_async_serial_handler, remote_async): Update.
> ---
> gdb/remote.c | 17 ++++++++++-------
> 1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/gdb/remote.c b/gdb/remote.c
> index 94aa5a8..39ad2ef 100644
> --- a/gdb/remote.c
> +++ b/gdb/remote.c
> @@ -409,6 +409,10 @@ struct remote_state
>
> int use_threadinfo_query;
> int use_threadextra_query;
> +
> + void (*async_client_callback) (enum inferior_event_type event_type,
> + void *context);
> + void *async_client_context;
> };
>
> /* Private data that we'll store in (struct thread_info)->private. */
> @@ -11638,17 +11642,16 @@ remote_is_async_p (void)
> will be able to delay notifying the client of an event until the
> point where an entire packet has been received. */

This comment above is related to the callback.

>
> -static void (*async_client_callback) (enum inferior_event_type event_type,
> - void *context);
> -static void *async_client_context;
> static serial_event_ftype remote_async_serial_handler;
>
> static void
> remote_async_serial_handler (struct serial *scb, void *context)
> {
> + struct remote_state *rs = context;

Does this actually work?

> +
> /* Don't propogate error information up to the client. Instead let
> the client find out about the error by querying the target. */
> - async_client_callback (INF_REG_EVENT, async_client_context);
> + rs->async_client_callback (INF_REG_EVENT, rs->async_client_context);
> }
>
> static void
> @@ -11665,9 +11668,9 @@ remote_async (void (*callback) (enum inferior_event_type event_type,
>
> if (callback != NULL)
> {
> - serial_async (rs->remote_desc, remote_async_serial_handler, NULL);
> - async_client_callback = callback;
> - async_client_context = context;
> + serial_async (rs->remote_desc, remote_async_serial_handler, rs);
> + rs->async_client_callback = callback;
> + rs->async_client_context = context;

Because I think CONTEXT is always NULL here.

And it'd seem a wrong to me to store the remote state in the
meant for context passed in by the target_async's caller?

--
Pedro Alves