[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 2/7] libxl_qmp, Introduce an opaque argument to the callbacks.



On Fri, 2011-10-07 at 13:10 +0100, Anthony PERARD wrote:
> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

> ---
>  tools/libxl/libxl_qmp.c |   29 +++++++++++++++++++----------
>  1 files changed, 19 insertions(+), 10 deletions(-)
> 
> diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
> index 34db29f..5ab9acc 100644
> --- a/tools/libxl/libxl_qmp.c
> +++ b/tools/libxl/libxl_qmp.c
> @@ -43,11 +43,13 @@
>  #define QMP_RECEIVE_BUFFER_SIZE 4096
>  
>  typedef int (*qmp_callback_t)(libxl__qmp_handler *qmp,
> -                              const libxl__json_object *tree);
> +                              const libxl__json_object *tree,
> +                              void *opaque);
>  
>  typedef struct callback_id_pair {
>      int id;
>      qmp_callback_t callback;
> +    void *opaque;
>      SIMPLEQ_ENTRY(callback_id_pair) next;
>  } callback_id_pair;
>  
> @@ -70,7 +72,8 @@ struct libxl__qmp_handler {
>  };
>  
>  static int qmp_send(libxl__qmp_handler *qmp,
> -                    const char *cmd, qmp_callback_t callback);
> +                    const char *cmd,
> +                    qmp_callback_t callback, void *opaque);
>  
>  static const int QMP_SOCKET_CONNECT_TIMEOUT = 5;
>  
> @@ -100,7 +103,8 @@ static int store_serial_port_info(libxl__qmp_handler *qmp,
>  }
>  
>  static int register_serials_chardev_callback(libxl__qmp_handler *qmp,
> -                                             const libxl__json_object *o)
> +                                             const libxl__json_object *o,
> +                                             void *unused)
>  {
>      const libxl__json_object *obj = NULL;
>      const libxl__json_object *label = NULL;
> @@ -144,7 +148,7 @@ static int 
> register_serials_chardev_callback(libxl__qmp_handler *qmp,
>  }
>  
>  static int qmp_capabilities_callback(libxl__qmp_handler *qmp,
> -                                     const libxl__json_object *o)
> +                                     const libxl__json_object *o, void 
> *unused)
>  {
>      qmp->connected = true;
>  
> @@ -157,7 +161,7 @@ static int qmp_capabilities_callback(libxl__qmp_handler 
> *qmp,
>  
>  static int enable_qmp_capabilities(libxl__qmp_handler *qmp)
>  {
> -    return qmp_send(qmp, "qmp_capabilities", qmp_capabilities_callback);
> +    return qmp_send(qmp, "qmp_capabilities", qmp_capabilities_callback, 
> NULL);
>  }
>  
>  /*
> @@ -208,7 +212,7 @@ static void qmp_handle_error_response(libxl__qmp_handler 
> *qmp,
>      resp = libxl__json_map_get("desc", resp, JSON_STRING);
>  
>      if (pp) {
> -        pp->callback(qmp, NULL);
> +        pp->callback(qmp, NULL, pp->opaque);
>          if (pp->id == qmp->wait_for_id) {
>              /* tell that the id have been processed */
>              qmp->wait_for_id = 0;
> @@ -241,7 +245,8 @@ static int qmp_handle_response(libxl__qmp_handler *qmp,
>  
>          if (pp) {
>              pp->callback(qmp,
> -                         libxl__json_map_get("return", resp, JSON_ANY));
> +                         libxl__json_map_get("return", resp, JSON_ANY),
> +                         pp->opaque);
>              if (pp->id == qmp->wait_for_id) {
>                  /* tell that the id have been processed */
>                  qmp->wait_for_id = 0;
> @@ -423,7 +428,8 @@ static int qmp_next(libxl__gc *gc, libxl__qmp_handler 
> *qmp)
>  }
>  
>  static int qmp_send(libxl__qmp_handler *qmp,
> -                    const char *cmd, qmp_callback_t callback)
> +                    const char *cmd,
> +                    qmp_callback_t callback, void *opaque)
>  {
>      yajl_gen_config conf = { 0, NULL };
>      const unsigned char *buf;
> @@ -461,6 +467,7 @@ static int qmp_send(libxl__qmp_handler *qmp,
>          }
>          elm->id = qmp->last_id_used;
>          elm->callback = callback;
> +        elm->opaque = opaque;
>          SIMPLEQ_INSERT_TAIL(&qmp->callback_list, elm, next);
>      }
>  
> @@ -483,13 +490,14 @@ error:
>  }
>  
>  static int qmp_synchronous_send(libxl__qmp_handler *qmp, const char *cmd,
> -                                qmp_callback_t callback, int ask_timeout)
> +                                qmp_callback_t callback, void *opaque,
> +                                int ask_timeout)
>  {
>      int id = 0;
>      int ret = 0;
>      libxl__gc gc = LIBXL_INIT_GC(qmp->ctx);
>  
> -    id = qmp_send(qmp, cmd, callback);
> +    id = qmp_send(qmp, cmd, callback, opaque);
>      if (id <= 0) {
>          return -1;
>      }
> @@ -579,6 +587,7 @@ int libxl__qmp_query_serial(libxl__qmp_handler *qmp)
>  {
>      return qmp_synchronous_send(qmp, "query-chardev",
>                                  register_serials_chardev_callback,
> +                                NULL,
>                                  qmp->timeout);
>  }
>  



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.