
On Fri, May 03, 2013 at 10:44:24AM +0200, Ján Tomko wrote:
On 05/02/2013 02:03 PM, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange@redhat.com>
The udevFreeIfaceDef function in the udev interface driver just duplicates code from virInterfaceDefFree. Delete it and call the standard API instead.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- src/interface/interface_backend_udev.c | 45 ++-------------------------------- 1 file changed, 2 insertions(+), 43 deletions(-)
diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c index 79c57ee..0384ef5 100644 --- a/src/interface/interface_backend_udev.c +++ b/src/interface/interface_backend_udev.c @@ -542,44 +542,6 @@ udevBridgeScanDirFilter(const struct dirent *entry) return 1; }
-/** - * Frees any memory allocated by udevGetIfaceDef() - * - * @param ifacedef - interface to free and cleanup - */ -static void -udevFreeIfaceDef(virInterfaceDef *ifacedef) -{ ... - - if (ifacedef->type == VIR_INTERFACE_TYPE_VLAN) { - VIR_FREE(ifacedef->data.vlan.devname); - }
virInterfaceDefFree also frees data.vlan.tag, which would result in freeing an invalid pointer, because it's created by a pretty ugly way in udevGetIfaceDefVlan:
vlan_parent_dev = strdup(name); if (!vlan_parent_dev) { virReportOOMError(); goto cleanup; }
/* Find the DEVICE.VID again */ vid = strrchr(vlan_parent_dev, '.'); if (!vid) { virReportError(VIR_ERR_INTERNAL_ERROR, _("failed to find the VID for the VLAN device '%s'"), name); goto cleanup; }
/* Replace the dot with a NULL so we can have the device and VID */ vid[0] = '\0'; vid++;
/* Set the VLAN specifics */ ifacedef->data.vlan.tag = vid; ifacedef->data.vlan.devname = vlan_parent_dev;
My god that code must die a horrible death. It is currently leaking memory by doing this. 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 :|