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
|