On 01/25/2012 04:41 PM, Eric Blake wrote:
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.
Pushed both patches with fixes applied.