[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