[libvirt] [PATCH 11/14] xen: Resource resource leak with 'cpuset'

John Ferlan jferlan at redhat.com
Wed Jan 9 14:54:17 UTC 2013


Make cpuset local to the while loop and free it once done with it each
time through the loop.
---
 src/xen/xend_internal.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index 84a25e8..c6b800b 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -1113,7 +1113,6 @@ sexpr_to_xend_topology(const struct sexpr *root,
 {
     const char *nodeToCpu;
     const char *cur;
-    virBitmapPtr cpuset = NULL;
     int *cpuNums = NULL;
     int cell, cpu, nb_cpus;
     int n = 0;
@@ -1131,6 +1130,7 @@ sexpr_to_xend_topology(const struct sexpr *root,
 
     cur = nodeToCpu;
     while (*cur != 0) {
+        virBitmapPtr cpuset = NULL;
         /*
          * Find the next NUMA cell described in the xend output
          */
@@ -1152,8 +1152,10 @@ sexpr_to_xend_topology(const struct sexpr *root,
                 goto memory_error;
         } else {
             nb_cpus = virBitmapParse(cur, 'n', &cpuset, numCpus);
-            if (nb_cpus < 0)
+            if (nb_cpus < 0) {
+                virBitmapFree(cpuset);
                 goto error;
+            }
         }
 
         for (n = 0, cpu = 0; cpu < numCpus; cpu++) {
@@ -1163,28 +1165,26 @@ sexpr_to_xend_topology(const struct sexpr *root,
             if (used)
                 cpuNums[n++] = cpu;
         }
+        virBitmapFree(cpuset);
 
         if (virCapabilitiesAddHostNUMACell(caps,
                                            cell,
                                            nb_cpus,
                                            cpuNums) < 0)
             goto memory_error;
+
     }
     VIR_FREE(cpuNums);
-    virBitmapFree(cpuset);
     return 0;
 
   parse_error:
     virReportError(VIR_ERR_XEN_CALL, "%s", _("topology syntax error"));
   error:
     VIR_FREE(cpuNums);
-    virBitmapFree(cpuset);
-
     return -1;
 
   memory_error:
     VIR_FREE(cpuNums);
-    virBitmapFree(cpuset);
     virReportOOMError();
     return -1;
 }
-- 
1.7.11.7




More information about the libvir-list mailing list