[libvirt] [libvirt-glib 13/23] Remove GVirConfigObject::docHandle
Daniel P. Berrange
berrange at redhat.com
Tue Oct 18 11:44:27 UTC 2011
On Fri, Oct 07, 2011 at 11:40:58AM +0200, Christophe Fergeau wrote:
> GVirConfigObject also contains an xmlNodePtr which is more useful
> since it indicates the position of the current config object in
> the source XML file. Since xmlNode has a 'doc' member, having
> both an xmlNodePtr and an xmlDocPtr in GVirConfigObject is
> redundant.
> ---
> libvirt-gconfig/libvirt-gconfig-object.c | 50 +++++++++++++----------------
> libvirt-gconfig/libvirt-gconfig-object.h | 1 -
> libvirt-gconfig/libvirt-gconfig.sym | 1 -
> 3 files changed, 22 insertions(+), 30 deletions(-)
>
> diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c
> index 66102ec..b7829c9 100644
> --- a/libvirt-gconfig/libvirt-gconfig-object.c
> +++ b/libvirt-gconfig/libvirt-gconfig-object.c
> @@ -43,10 +43,6 @@ struct _GVirConfigObjectPrivate
> gchar *doc;
> gchar *schema;
>
> - /* FIXME: docHandle is node->doc, can probably be removed to avoid the
> - * 2 getting out of sync
> - */
> - xmlDocPtr docHandle;
> xmlNodePtr node;
> };
>
> @@ -117,15 +113,17 @@ static void gvir_config_object_set_property(GObject *object,
> priv->schema = g_value_dup_string(value);
> break;
>
> - case PROP_NODE:
> - priv->node = g_value_get_pointer(value);
> - if ((priv->docHandle != NULL) && (priv->docHandle != priv->node->doc))
> - xmlFreeDoc(priv->docHandle);
> - if (priv->node)
> - priv->docHandle = priv->node->doc;
> - else
> - priv->docHandle = NULL;
> + case PROP_NODE: {
> + xmlNodePtr node;
> + node = g_value_get_pointer(value);
> + if ((priv->node != NULL)
> + && (priv->node->doc != NULL)
> + && (priv->node->doc != node->doc)) {
> + xmlFreeDoc(priv->node->doc);
> + }
> + priv->node = node;
> break;
> + }
>
> default:
> G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
> @@ -143,8 +141,12 @@ static void gvir_config_object_finalize(GObject *object)
> g_free(priv->doc);
> g_free(priv->schema);
>
> - if (priv->docHandle)
> - xmlFreeDoc(priv->docHandle);
> + /* FIXME: all objects describing a given XML document will share the
> + * same document so we can't destroy it here like this, we need some
> + * refcounting to know when to destroy it.
> + */
> + if (priv->node)
> + xmlFreeDoc(priv->node->doc);
This could be reason for creating a trivial GObject to wrap
the xmlDocPtr instance, gaining ref counting.
ACK
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 :|
More information about the libvir-list
mailing list