[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |