This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]