On 01/25/2012 11:58 AM, Stefan Berger wrote:
> Compare two filters' XML for equality and only rebuild/instantiate the new
> filter if the new and current filters are found to be different. This
> improves performance during an update of a filter with no obvious change
> or the reloading of filters during a 'kill -SIGHUP'
> 
> ---
>  src/conf/nwfilter_conf.c |   37 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 37 insertions(+)
> 
> Index: libvirt-iterator/src/conf/nwfilter_conf.c
> ===================================================================
> --- libvirt-iterator.orig/src/conf/nwfilter_conf.c
> +++ libvirt-iterator/src/conf/nwfilter_conf.c
> @@ -2809,6 +2809,35 @@ virNWFilterTestUnassignDef(virConnectPtr
>      return rc;
>  }
>  
> +static bool
> +virNWFilterDefEqual(const virNWFilterDefPtr def1, virNWFilterDefPtr def2,
> +                    bool cmpUUIDs)
> +{
> +    bool ret = false;
> +    unsigned char rem_uuid[VIR_UUID_BUFLEN];
> +    char *xml1, *xml2 = NULL;
> +
> +    if (!cmpUUIDs) {
> +        /* make sure the UUIDs are equal */
> +        memcpy(rem_uuid, def2->uuid, sizeof(rem_uuid));
> +        memcpy(def2->uuid, def1->uuid, sizeof(def2->uuid));
> +    }
> +
> +    if (!(xml1 = virNWFilterDefFormat(def1)) ||
> +        !(xml2 = virNWFilterDefFormat(def2)))
> +        goto cleanup;
> +
> +    ret = STREQ(xml1, xml2);
> +
> +    if (!cmpUUIDs)
> +        memcpy(def2->uuid, rem_uuid, sizeof(rem_uuid));
> +
> +cleanup:

Misplaced label.  You need to slide it up two lines, and unconditionally
call the memcpy() to undo things when !cmpUUIDs.

ACK with that fixed.

-- 
Eric Blake   ebl...@redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to