[libvirt] [PATCH 05/13] domain_conf: Resolve resource leaks found by Valgrind

Osier Yang jyang at redhat.com
Thu Feb 7 02:06:34 UTC 2013


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.




More information about the libvir-list mailing list