On Tue, Sep 11, 2012 at 07:42:41PM +0200, Michal Privoznik wrote: > which is basically a wrapper for virConnectGetType(). > --- > examples/conn-test.c | 12 ++++++ > libvirt-gobject/libvirt-gobject-connection.c | 53 ++++++++++++++++++++++++++ > libvirt-gobject/libvirt-gobject-connection.h | 3 + > libvirt-gobject/libvirt-gobject.sym | 5 ++ > 4 files changed, 73 insertions(+), 0 deletions(-) > > diff --git a/examples/conn-test.c b/examples/conn-test.c > index 8c70997..b90d2b0 100644 > --- a/examples/conn-test.c > +++ b/examples/conn-test.c > @@ -31,11 +31,23 @@ do_connection_open(GObject *source, > { > GVirConnection *conn = GVIR_CONNECTION(source); > GError *err = NULL; > + gchar *hv_name = NULL; > > if (!gvir_connection_open_finish(conn, res, &err)) { > g_error("%s", err->message); > + goto cleanup; > } > g_print("Connected to libvirt\n"); > + > + if (!(hv_name = gvir_connection_get_hypervisor_name(conn, &err))) { > + g_error("%s", err->message); > + goto cleanup; > + } > + > + g_print("Hypervisor name: %s\n", hv_name); > + > +cleanup: > + g_free(hv_name); > g_object_unref(conn); > } > > diff --git a/libvirt-gobject/libvirt-gobject-connection.c b/libvirt-gobject/libvirt-gobject-connection.c > index d826905..f0be875 100644 > --- a/libvirt-gobject/libvirt-gobject-connection.c > +++ b/libvirt-gobject/libvirt-gobject-connection.c > @@ -1025,6 +1025,59 @@ const gchar *gvir_connection_get_uri(GVirConnection *conn) > return conn->priv->uri; > } > > +/** > + * gvir_connection_get_hypervisor_name: > + * @conn: a #GVirConnection > + * @err: return location for any #GError > + * > + * Get name of current hypervisor used. > + * > + * Return value: new string that should be freed when no longer needed, > + * or NULL upon error. > + */ > +gchar * > +gvir_connection_get_hypervisor_name(GVirConnection *conn, > + GError **err) > +{ > + GVirConnectionPrivate *priv; > + virConnectPtr vconn = NULL; > + gchar *ret = NULL; > + const char *type; > + > + g_return_val_if_fail(GVIR_IS_CONNECTION(conn), NULL); > + > + priv = conn->priv; > + g_mutex_lock(priv->lock); > + if (!priv->conn) { > + g_set_error_literal(err, GVIR_CONNECTION_ERROR, 0, > + "Connection is not open"); > + g_mutex_unlock(priv->lock); > + goto cleanup; > + } > + > + vconn = priv->conn; > + /* Stop another thread closing the connection just at the minute */ > + virConnectRef(vconn); > + g_mutex_unlock(priv->lock); > + > + type = virConnectGetType(priv->conn); > + if (!type) { > + gvir_set_error_literal(err, GVIR_CONNECTION_ERROR, 0, > + "Unable to get hypervisor name"); > + goto cleanup; > + } > + > + ret = g_strdup(type); > + > +cleanup: > + if (vconn) { > + g_mutex_lock(priv->lock); > + virConnectClose(vconn); > + g_mutex_unlock(priv->lock); > + } There's no need to lock/unlock here, since you're not touching anything in 'priv', and virConnectPtr has its own locking as needed. ACK to the rest Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list