From: "Zeeshan Ali (Khattak)" <zeeshanak@xxxxxxxxx> --- libvirt-gobject/libvirt-gobject-domain.c | 80 ++++++++++++++++++++++++++++++ libvirt-gobject/libvirt-gobject-domain.h | 7 +++ libvirt-gobject/libvirt-gobject.sym | 4 +- 3 files changed, 90 insertions(+), 1 deletions(-) diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c index 350a5b0..67ca257 100644 --- a/libvirt-gobject/libvirt-gobject-domain.c +++ b/libvirt-gobject/libvirt-gobject-domain.c @@ -572,6 +572,86 @@ GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom, return ret; } +static void +gvir_domain_get_info_helper(GSimpleAsyncResult *res, + GObject *object, + GCancellable *cancellable G_GNUC_UNUSED) +{ + GVirDomain *dom = GVIR_DOMAIN(object); + GVirDomainInfo *info; + GError *err = NULL; + + info = gvir_domain_get_info(dom, &err); + if (err) + g_simple_async_result_take_error(res, err); + else + g_simple_async_result_set_op_res_gpointer + (res, + info, + (GDestroyNotify) gvir_domain_info_free); +} + +/** + * gvir_domain_get_info_async: + * @dom: the domain + * @cancellable: (allow-none)(transfer none): cancellation object + * @callback: (scope async): completion callback + * @user_data: (closure): opaque data for callback + * + * Asynchronous variant of #gvir_domain_get_info. + */ +void gvir_domain_get_info_async(GVirDomain *dom, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *res; + + g_return_if_fail(GVIR_IS_DOMAIN(dom)); + + res = g_simple_async_result_new(G_OBJECT(dom), + callback, + user_data, + gvir_domain_get_info_async); + g_simple_async_result_run_in_thread(res, + gvir_domain_get_info_helper, + G_PRIORITY_DEFAULT, + cancellable); + g_object_unref(res); +} + +/** + * gvir_domain_get_info_finish: + * @dom: the domain + * @result: (transfer none): async method result + * @err: Place-holder for possible errors + * + * Finishes the operation started by #gvir_domain_get_info_async. + * + * Returns: (transfer full): the info + */ +GVirDomainInfo *gvir_domain_get_info_finish(GVirDomain *dom, + GAsyncResult *result, + GError **err) +{ + GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT(result); + GVirDomainInfo *ret; + + g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL); + g_return_val_if_fail + (g_simple_async_result_is_valid(result, + G_OBJECT(dom), + gvir_domain_get_info_async), + NULL); + + if (g_simple_async_result_propagate_error(res, err)) + return NULL; + + ret = g_simple_async_result_get_op_res_gpointer(res); + + return gvir_domain_info_copy (ret); +} + /** * gvir_domain_screenshot: * @stream: stream to use as output diff --git a/libvirt-gobject/libvirt-gobject-domain.h b/libvirt-gobject/libvirt-gobject-domain.h index 8a4836e..677fbe6 100644 --- a/libvirt-gobject/libvirt-gobject-domain.h +++ b/libvirt-gobject/libvirt-gobject-domain.h @@ -141,6 +141,13 @@ gboolean gvir_domain_reboot(GVirDomain *dom, GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom, GError **err); +void gvir_domain_get_info_async(GVirDomain *dom, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +GVirDomainInfo *gvir_domain_get_info_finish(GVirDomain *dom, + GAsyncResult *result, + GError **err); GVirConfigDomain *gvir_domain_get_config(GVirDomain *dom, guint flags, diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym index 64c91cc..f43836f 100644 --- a/libvirt-gobject/libvirt-gobject.sym +++ b/libvirt-gobject/libvirt-gobject.sym @@ -1,4 +1,4 @@ -LIBVIRT_GOBJECT_0.0.7 { +LIBVIRT_GOBJECT_0.0.8 { global: gvir_init_object; gvir_init_object_check; @@ -70,6 +70,8 @@ LIBVIRT_GOBJECT_0.0.7 { gvir_domain_set_config; gvir_domain_get_devices; gvir_domain_get_info; + gvir_domain_get_info_async; + gvir_domain_get_info_finish; gvir_domain_get_persistent; gvir_domain_get_saved; gvir_domain_screenshot; -- 1.7.7.6 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list