[libvirt] [libvirt-glib] [PATCH v2 3/4] GVirDomain: Add async version of _create_snapshot
Christophe Fergeau
cfergeau at redhat.com
Wed Aug 20 13:08:25 UTC 2014
Few nits, will fix before pushing.
On Tue, Aug 19, 2014 at 06:06:23PM +0200, Timm Bäder wrote:
> ---
> libvirt-gobject/libvirt-gobject-domain.c | 74 ++++++++++++++++++++++++++++++++
> libvirt-gobject/libvirt-gobject-domain.h | 12 ++++++
> libvirt-gobject/libvirt-gobject.sym | 2 +
> 3 files changed, 88 insertions(+)
>
> diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c
> index aa2a170..0b94f16 100644
> --- a/libvirt-gobject/libvirt-gobject-domain.c
> +++ b/libvirt-gobject/libvirt-gobject-domain.c
> @@ -61,6 +61,16 @@ enum {
> LAST_SIGNAL
> };
>
> +typedef struct {
> + guint create_flags;
> + GVirConfigDomainSnapshot *snapshot_config;
> +} SnapshotCreateData;
> +
> +static void snapshot_create_data_free (SnapshotCreateData *data) {
> + g_clear_object (&data->snapshot_config);
> + g_slice_free (SnapshotCreateData, data);
> +}
> +
> static gint signals[LAST_SIGNAL];
>
> #define GVIR_DOMAIN_ERROR gvir_domain_error_quark()
> @@ -1524,6 +1534,70 @@ gvir_domain_create_snapshot(GVirDomain *dom,
> }
>
>
> +static void _create_snapshot_async_thread(GTask *task,
> + gpointer source_object,
> + gpointer task_data,
> + GCancellable *cancellable) {
> + GError *error = NULL;
> + GVirDomainSnapshot *snapshot;
> + SnapshotCreateData *create_data = task_data;
> +
> + snapshot = gvir_domain_create_snapshot(source_object,
> + create_data->snapshot_config,
> + create_data->create_flags,
> + &error);
> + if (snapshot)
> + g_task_return_pointer(task, snapshot, g_object_unref);
> + else
> + g_task_return_error(task, error);
> +}
> +
> +/**
> + * gvir_domain_create_snapshot_async:
> + * @dom: The #GVirDomain
> + * @custom_conf: (allow-none): Configuration of snapshot or %NULL
> + * @flags: Bitwise-OR of #GVirDomainSnapshotCreateFlags
> + * @cancellable: (allow-none) (transfer none): cancellation object
> + * @callback: (scope async): Complection callback
Completion
> + * @user_data: (closure): Opaque data for callback
> + */
> +void gvir_domain_create_snapshot_async(GVirDomain *dom,
> + GVirConfigDomainSnapshot *custom_conf,
> + guint flags,
> + GCancellable *cancellable,
> + GAsyncReadyCallback callback,
> + gpointer user_data) {
> + SnapshotCreateData *create_data;
> + GTask *task;
> +
> + g_return_if_fail(GVIR_IS_DOMAIN(dom));
> + g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT(custom_conf));
> +
> + create_data = g_slice_new(SnapshotCreateData);
> + create_data->create_flags = flags;
> + create_data->snapshot_config = g_object_ref (custom_conf);
> +
> + task = g_task_new(dom, cancellable, callback, user_data);
> + g_task_set_task_data(task, create_data, (GDestroyNotify)snapshot_create_data_free);
> + g_task_run_in_thread(task, _create_snapshot_async_thread);
> + g_object_unref(task);
> +}
> +
> +/**
> + * gvir_domain_create_snapshot_finish:
> + * @domain: A #GVirDomain
> + * @result: (transfer none): Async method result
> + * @error: (allow-none): Error placeholder
> + *
> + * Returns: (transfer full): The created snapshot
> + */
> +GVirDomainSnapshot * gvir_domain_create_snapshot_finish(GVirDomain *domain,
no space after '*' here.
Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140820/3a3c0657/attachment-0001.sig>
More information about the libvir-list
mailing list