On Wed, Jul 09, 2014 at 06:23:24PM +0200, Timm Bäder wrote: > ... which returns a GList of GVirDomainSnapshots, i.e. without any tree > structure or other relationship between the snapshots. > --- > libvirt-gobject/libvirt-gobject-domain.c | 21 +++++++++++++++++++++ > libvirt-gobject/libvirt-gobject-domain.h | 4 ++++ > libvirt-gobject/libvirt-gobject.sym | 1 + > 3 files changed, 26 insertions(+) > > diff --git a/libvirt-gobject/libvirt-gobject-domain.c b/libvirt-gobject/libvirt-gobject-domain.c > index adb5179..8f48c2e 100644 > --- a/libvirt-gobject/libvirt-gobject-domain.c > +++ b/libvirt-gobject/libvirt-gobject-domain.c > @@ -1600,3 +1600,24 @@ cleanup: > g_hash_table_unref (snap_table); > return ret; > } > + > +/** > + * gvir_domain_get_snapshots: > + * @dom: The domain > + * Returns: (element-type LibvirtGObject.DomainSnapshot) (transfer full): A > + * list of all the snapshots available for the given domain. The returned > + * list should be freed with g_list_free(), after its elements have been > + * unreffed with g_object_unref(). > + */ > +GList *gvir_domain_get_snapshots(GVirDomain *dom) > +{ > + GList *snapshots = NULL; > + g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL); > + > + if (dom->priv->snapshots != NULL) { > + snapshots = g_hash_table_get_values(dom->priv->snapshots); > + g_list_foreach(snapshots, (GFunc)g_object_ref, NULL); > + } > + > + return snapshots; You need to take the snapshot list mutex while generating the list copy, otherwise you could race with a call to gvir_domain_fetch_snapshot running in another thread and destroying the objects you are copying. Christophe
Attachment:
pgpkbGVc0q9Ui.pgp
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list