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

Re: [Xen-devel] [PATCH 4/7] libxl_qmp, Always insert a command id in the callback_list.



On Fri, 2011-10-07 at 13:10 +0100, Anthony PERARD wrote:
> Because the function qmp_synchronous_send rely on the presence of the id
> in the callback_list.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

> ---
>  tools/libxl/libxl_qmp.c |   34 ++++++++++++++++++----------------
>  1 files changed, 18 insertions(+), 16 deletions(-)
> 
> diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c
> index 002fb13..1594a4f 100644
> --- a/tools/libxl/libxl_qmp.c
> +++ b/tools/libxl/libxl_qmp.c
> @@ -213,7 +213,9 @@ 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->opaque);
> +        if (pp->callback) {
> +            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;
> @@ -245,9 +247,11 @@ static int qmp_handle_response(libxl__qmp_handler *qmp,
>          callback_id_pair *pp = qmp_get_callback_from_id(qmp, resp);
>  
>          if (pp) {
> -            pp->callback(qmp,
> -                         libxl__json_map_get("return", resp, JSON_ANY),
> -                         pp->opaque);
> +            if (pp->callback) {
> +                pp->callback(qmp,
> +                             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;
> @@ -437,6 +441,7 @@ static int qmp_send(libxl__qmp_handler *qmp,
>      unsigned int len = 0;
>      yajl_gen_status s;
>      yajl_gen hand;
> +    callback_id_pair *elm = NULL;
>  
>      hand = yajl_gen_alloc(&conf, NULL);
>      if (!hand) {
> @@ -462,19 +467,16 @@ static int qmp_send(libxl__qmp_handler *qmp,
>          return -1;
>      }
>  
> -    if (callback) {
> -        callback_id_pair *elm = malloc(sizeof (callback_id_pair));
> -        if (elm == NULL) {
> -            LIBXL__LOG_ERRNO(qmp->ctx, LIBXL__LOG_ERROR,
> -                             "Failed to allocate a QMP callback");
> -            yajl_gen_free(hand);
> -            return -1;
> -        }
> -        elm->id = qmp->last_id_used;
> -        elm->callback = callback;
> -        elm->opaque = opaque;
> -        SIMPLEQ_INSERT_TAIL(&qmp->callback_list, elm, next);
> +    elm = malloc(sizeof (callback_id_pair));
> +    if (elm == NULL) {
> +        LIBXL__LOG_ERRNO(qmp->ctx, LIBXL__LOG_ERROR,
> +                         "Failed to allocate a QMP callback");
> +        goto error;
>      }
> +    elm->id = qmp->last_id_used;
> +    elm->callback = callback;
> +    elm->opaque = opaque;
> +    SIMPLEQ_INSERT_TAIL(&qmp->callback_list, elm, next);
>  
>      LIBXL__LOG(qmp->ctx, LIBXL__LOG_DEBUG, "next qmp command: '%s'", buf);
>  



_______________________________________________
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®.