Hi, I don't understand this patch. It neither applies on top of your virDomainSave*() patch, nor its parent commit. Apart from some of the same issues I saw in the other patch, I see some weird stuff that I didn't quite understand: On Fri, Jul 13, 2012 at 7:43 AM, Jovanka Gulicoska <jovanka.gulicoska@xxxxxxxxx> wrote: > --- > libvirt-gobject/libvirt-gobject-connection.c | 137 ++++++++++++++++++++++++++ > libvirt-gobject/libvirt-gobject-connection.h | 20 ++++ > libvirt-gobject/libvirt-gobject-domain.c | 22 ++--- > libvirt-gobject/libvirt-gobject-domain.h | 10 ++ > libvirt-gobject/libvirt-gobject.sym | 4 + > 5 files changed, 180 insertions(+), 13 deletions(-) > > diff --git a/libvirt-gobject/libvirt-gobject-connection.c b/libvirt-gobject/libvirt-gobject-connection.c > index 3a99034..5f21c11 100644 > --- a/libvirt-gobject/libvirt-gobject-connection.c > +++ b/libvirt-gobject/libvirt-gobject-connection.c > @@ -1605,3 +1605,140 @@ gvir_connection_get_capabilities_finish(GVirConnection *conn, > > return g_object_ref(caps); > } > + > +/** > + * gvir_connection_domain_restore: > + * @conn: a #GVirConnection > + * @filename: path to input file > + * @custom_conf: (allow-none): configuration for domain or NULL > + * @flags: the flags > + * > + * Returns: TRUE on success, FALSE otherwise > + */ > +gboolean gvir_connection_domain_restore(GVirConnection *conn, > + gchar *filename, > + GVirConfigDomain *custom_conf, > + guint flags, > + GError **err) > +{ > + GVirConnectionPrivate *priv; > + int ret; > + > + g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE); > + g_return_val_if_fail((err == NULL) || (*err == NULL), FALSE); > + > + priv = conn->priv; > + > + if (flags || custom_conf != NULL) { > + gchar *custom_xml = NULL; > + > + if (custom_conf != NULL) > + custom_xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(custom_conf)); > + > + ret = virDomainRestoreFlags(priv->conn, filename, custom_xml, flags); > + g_free (custom_xml); > + } > + else { > + ret = virDomainRestore(priv->conn, filename); > + } > + > + if (ret < 0) { > + gvir_set_error_literal(err, GVIR_CONNECTION_ERROR, > + 0, > + "Unable to restore domain"); > + > + return FALSE; > + } > + > + return TRUE; > +} > + > +static void > +gvir_connection_domain_restore_helper(GSimpleAsyncResult *res, > + GObject *object, > + GCancellable *cancellable G_GNUC_UNUSED) > +{ > + GVirConnection *conn = GVIR_CONNECTION(object); > + GVirDomainRestoreFromFileData *data; > + GError *err = NULL; > + > + data = g_simple_async_result_get_op_res_gpointer(res); > + > + if (!gvir_connection_domain_restore(conn, data->filename, data->custom_conf, > + data->flags, &err)) > + g_simple_async_result_take_error(res, err); > +} > + > +/** > + * gvir_connection_domain_restore_async: > + * @conn: a #GVirConnection > + * @filename: path to input file > + * @custom_conf: (allow-none): configuration for domain or NULL > + * @flags: the flags > + * @cancellable: (allow-none) (transfer none): cancallation object > + * @callback: (scope async): completion callback > + * @user_data: (closure): opaque data for callback > + * > + * Asynchronous variant of #gvir_connection_domain_restore > + */ > +void gvir_connection_domain_restore_async(GVirConnection *conn, > + gchar *filename, > + GVirConfigDomain *custom_conf, > + guint flags, > + GCancellable *cancellable, > + GAsyncReadyCallback callback, > + gpointer user_data) > +{ > + GSimpleAsyncResult *res; > + GVirDomainRestoreFromFileData *data; > + > + g_return_if_fail(GVIR_IS_CONNECTION(conn)); > + g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable)); > + > + data = g_slice_new0(GVirDomainRestoreFromFileData); > + data->filename = g_strdup(filename); > + data->custom_conf = g_object_ref(custom_conf); > + data->flags = flags; > + > + res = g_simple_async_result_new(G_OBJECT(conn), > + callback, > + user_data, > + gvir_connection_domain_restore_async); > + g_simple_async_result_set_op_res_gpointer > + (res, data, > + (GDestroyNotify)gvir_domain_save_to_file_data_free); > + > + g_simple_async_result_run_in_thread(res, > + gvir_connection_domain_restore_helper, > + G_PRIORITY_DEFAULT, > + cancellable); > + > + g_object_unref(res); > +} > + > +/** > + * gvir_connection_domain_finish: > + * @conn: a #GVirConnection > + * @result: (transfer none): async method result > + * @err: Place-holder for possible errors > + * > + * Finishes the operation started by #gvir_domain_restore_async. > + * > + * Returns: TRUE if domain was restored successfully, FALSE otherwise. > + */ > +gboolean gvir_connection_domain_restore_finish(GVirConnection *conn, > + GAsyncResult *result, > + GError **err) > +{ > + g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE); > + g_return_val_if_fail(g_simple_async_result_is_valid > + (result, G_OBJECT(conn), > + gvir_connection_domain_restore_async), > + FALSE); > + > + if (g_simple_async_result_propagate_error(G_SIMPLE_ASYNC_RESULT(result), > + err)) > + return FALSE; > + > + return TRUE; > +} > diff --git a/libvirt-gobject/libvirt-gobject-connection.h b/libvirt-gobject/libvirt-gobject-connection.h > index c80eecf..5932661 100644 > --- a/libvirt-gobject/libvirt-gobject-connection.h > +++ b/libvirt-gobject/libvirt-gobject-connection.h > @@ -38,6 +38,8 @@ G_BEGIN_DECLS > > #define GVIR_TYPE_CONNECTION_HANDLE (gvir_connection_handle_get_type ()) > > +#define GVirDomainRestoreFromFileData GVirDomainSaveToFileData > + > typedef struct _GVirNodeInfo GVirNodeInfo; > struct _GVirNodeInfo > { > @@ -202,6 +204,24 @@ gvir_connection_get_capabilities_finish(GVirConnection *conn, > GAsyncResult *result, > GError **err); > > +gboolean gvir_connection_domain_restore(GVirConnection *conn, > + gchar *filename, > + GVirConfigDomain *custom_conf, > + guint flags, > + GError **err); > + > +void gvir_connection_domain_restore_async(GVirConnection *conn, > + gchar *filename, > + GVirConfigDomain *custom_conf, > + guint flags, > + GCancellable *cancellable, > + GAsyncReadyCallback callback, > + gpointer user_data); > + > +gboolean gvir_connection_domain_restore_finish(GVirConnection *conn, > + GAsyncResult *result, > + GError **err); > + > G_END_DECLS > > #endif /* __LIBVIRT_GOBJECT_CONNECTION_H__ */ > diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c > index 308a817..61c153b 100644 > --- a/libvirt-gobject/libvirt-gobject-domain.c > +++ b/libvirt-gobject/libvirt-gobject-domain.c > @@ -602,17 +602,11 @@ gboolean gvir_domain_save_to_file(GVirDomain *dom, > return TRUE; > } > > -typedef struct { > - gchar *filename; > - GVirConfigDomain *custom_conf; > - guint flags; > -} DomainSaveToFileData; > - > -static void domain_save_to_file_data_free(DomainSaveToFileData *data) > +void gvir_domain_save_to_file_data_free(GVirDomainSaveToFileData *data) > { > g_free(data->filename); > g_object_unref(data->custom_conf); > - g_slice_free(DomainSaveToFileData, data); > + g_slice_free(GVirDomainSaveToFileData, data); What are all these changes for? You shouldn't be changing anything related to virDomainSave here at all. > } > > static void > @@ -621,7 +615,7 @@ gvir_domain_save_to_file_helper(GSimpleAsyncResult *res, > GCancellable *cancellable G_GNUC_UNUSED) > { > GVirDomain *dom = GVIR_DOMAIN(object); > - DomainSaveToFileData *data; > + GVirDomainSaveToFileData *data; Same here. > GError *err = NULL; > > data = g_simple_async_result_get_op_res_gpointer(res); > @@ -651,12 +645,12 @@ void gvir_domain_save_to_file_async(GVirDomain *dom, > gpointer user_data) > { > GSimpleAsyncResult *res; > - DomainSaveToFileData *data; > + GVirDomainSaveToFileData *data; here too. > g_return_if_fail(GVIR_IS_DOMAIN(dom)); > g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable)); > > - data = g_slice_new0(DomainSaveToFileData); > + data = g_slice_new0(GVirDomainSaveToFileData); Ok, I stop pointing these now. I'm sure you can find the rest on your own. > data->filename = g_strdup(filename); > data->custom_conf = g_object_ref(custom_conf); > data->flags = flags; > @@ -665,8 +659,10 @@ void gvir_domain_save_to_file_async(GVirDomain *dom, > callback, > user_data, > gvir_domain_save_to_file_async); > - g_simple_async_result_set_op_res_gpointer(res, data, (GDestroyNotify) > - domain_save_to_file_data_free); > + g_simple_async_result_set_op_res_gpointer > + (res, data, > + (GDestroyNotify) > + gvir_domain_save_to_file_data_free); > > g_simple_async_result_run_in_thread(res, > gvir_domain_save_to_file_helper, > diff --git a/libvirt-gobject/libvirt-gobject-domain.h b/libvirt-gobject/libvirt-gobject-domain.h > index 8f17799..ac225a2 100644 > --- a/libvirt-gobject/libvirt-gobject-domain.h > +++ b/libvirt-gobject/libvirt-gobject-domain.h > @@ -112,6 +112,14 @@ struct _GVirDomainInfo > guint64 cpuTime; /* the CPU time used in nanoseconds */ > }; > > +typedef struct _GVirDomainSaveToFileData GVirDomainSaveToFileData; > +struct _GVirDomainSaveToFileData > +{ > + gchar *filename; > + GVirConfigDomain *custom_conf; > + guint flags; > +}; > + > GType gvir_domain_get_type(void); > GType gvir_domain_info_get_type(void); > GType gvir_domain_handle_get_type(void); > @@ -166,6 +174,8 @@ gboolean gvir_domain_save_to_file_finish(GVirDomain *dom, > GAsyncResult *result, > GError **err); > > +void gvir_domain_save_to_file_data_free(GVirDomainSaveToFileData *data); > + > GVirDomainInfo *gvir_domain_get_info(GVirDomain *dom, > GError **err); > void gvir_domain_get_info_async(GVirDomain *dom, > diff --git a/libvirt-gobject/libvirt-gobject.sym b/libvirt-gobject/libvirt-gobject.sym > index 54a093a..dde0e70 100644 > --- a/libvirt-gobject/libvirt-gobject.sym > +++ b/libvirt-gobject/libvirt-gobject.sym > @@ -31,6 +31,9 @@ LIBVIRT_GOBJECT_0.0.8 { > gvir_connection_create_storage_pool; > gvir_connection_start_domain; > gvir_connection_get_node_info; > + gvir_connection_domain_restore; > + gvir_connection_domain_restore_async; > + gvir_connection_domain_restore_finish; > > gvir_domain_device_get_type; > gvir_domain_device_get_domain; > @@ -78,6 +81,7 @@ LIBVIRT_GOBJECT_0.0.8 { > gvir_domain_save_to_file; > gvir_domain_save_to_file_async; > gvir_domain_save_to_file_finish; > + gvir_domain_save_to_file_data_free; > > gvir_domain_snapshot_get_type; > gvir_domain_snapshot_handle_get_type; > -- > 1.7.10.4 > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list -- Regards, Zeeshan Ali (Khattak) FSF member#5124 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list