
On 2013年02月07日 05:35, John Ferlan wrote:
Fix various resource leaks discovered while parsing through Valgrind output --- src/conf/domain_conf.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 27f5b5e..62a604f 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7604,6 +7604,7 @@ virDomainVideoDefParseXML(const xmlNodePtr node, VIR_FREE(ram); VIR_FREE(vram); VIR_FREE(heads); + VIR_FREE(primary);
return def;
@@ -9587,6 +9588,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, }
if ((value = virDomainFeatureStateTypeFromString(tmp))< 0) { + VIR_FREE(tmp); virReportError(VIR_ERR_XML_ERROR, _("invalid value of state argument " "for HyperV Enlightenment feature '%s'"), @@ -9594,6 +9596,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, goto error; }
+ VIR_FREE(tmp); def->hyperv_features[feature] = value; break;
Good to fix the leak in the similar hunk as well: tmp = virXPathString("string(./features/apic/@eoi)", ctxt); if (tmp) { int eoi; if ((eoi = virDomainFeatureStateTypeFromString(tmp)) <= 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("unknown value for attribute eoi: %s"), tmp); goto error; } def->apic_eoi = eoi; VIR_FREE(tmp); }
@@ -9922,6 +9925,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, if (controller->type == VIR_DOMAIN_CONTROLLER_TYPE_USB) { if (controller->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE) { if (usb_other || usb_none) { + virDomainControllerDefFree(controller); virReportError(VIR_ERR_XML_DETAIL, "%s", _("Can't add another USB controller: " "USB is disabled for this domain")); @@ -9930,6 +9934,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, usb_none = true; } else { if (usb_none) { + virDomainControllerDefFree(controller); virReportError(VIR_ERR_XML_DETAIL, "%s", _("Can't add another USB controller: " "USB is disabled for this domain")); @@ -10227,6 +10232,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
/* Check if USB bus is required */ if (input->bus == VIR_DOMAIN_INPUT_BUS_USB&& usb_none) { + virDomainInputDefFree(input); virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Can't add USB input device. " "USB bus is disabled")); @@ -10324,6 +10330,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
if (video->primary) { if (primaryVideo) { + virDomainVideoDefFree(video); virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Only one primary video device is supported")); goto error; @@ -10335,8 +10342,10 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, if (VIR_INSERT_ELEMENT_INPLACE(def->videos, ii, def->nvideos, - video)< 0) + video)< 0) { + virDomainVideoDefFree(video); goto error; + } } VIR_FREE(nodes);
@@ -10452,6 +10461,7 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, goto error;
if (hub->type == VIR_DOMAIN_HUB_TYPE_USB&& usb_none) { + virDomainHubDefFree(hub); virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Can't add USB hub: " "USB is disabled for this domain"));
ACK with fixing the similar hunk.