[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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



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.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]