[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