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

[Xen-changelog] [xen-unstable] xl: Call xlu_cfg_destroy in main_cpupoolcreate


  • To: xen-changelog@xxxxxxxxxxxxxxxxxxx
  • From: Xen patchbot-unstable <patchbot@xxxxxxx>
  • Date: Mon, 14 May 2012 16:32:29 +0000
  • Delivery-date: Mon, 14 May 2012 16:32:38 +0000
  • List-id: "Change log for Mercurial \(receive only\)" <xen-changelog.lists.xen.org>

# HG changeset patch
# User George Dunlap <george.dunlap@xxxxxxxxxxxxx>
# Date 1336754064 -3600
# Node ID 2e980a2405ebb1e213facd17fa423d2a4d6dedf0
# Parent  83f16dfd5f077b5b8242f4f9bf5b4301ff27b8e1
xl: Call xlu_cfg_destroy in main_cpupoolcreate

This involves making a goto clean-up path, rather than calling
return directly.

Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
---


diff -r 83f16dfd5f07 -r 2e980a2405eb tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Fri May 11 17:34:23 2012 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Fri May 11 17:34:24 2012 +0100
@@ -5591,6 +5591,7 @@ int main_cpupoolcreate(int argc, char **
     libxl_cpumap cpumap;
     libxl_uuid uuid;
     libxl_cputopology *topology;
+    int rc = -ERROR_FAIL; 
 
     while (1) {
         opt = getopt_long(argc, argv, "hnf:", long_options, &option_index);
@@ -5624,7 +5625,7 @@ int main_cpupoolcreate(int argc, char **
             filename = argv[optind];
         } else {
             help("cpupool-create");
-            return -ERROR_FAIL;
+            goto out;
         }
         optind++;
     }
@@ -5635,7 +5636,7 @@ int main_cpupoolcreate(int argc, char **
                                      &config_len)) {
             fprintf(stderr, "Failed to read config file: %s: %s\n",
                     filename, strerror(errno));
-            return -ERROR_FAIL;
+            goto out;
         }
         config_src=filename;
     }
@@ -5645,13 +5646,13 @@ int main_cpupoolcreate(int argc, char **
     if (strlen(extra_config)) {
         if (config_len > INT_MAX - (strlen(extra_config) + 2)) {
             fprintf(stderr, "Failed to attach extra configration\n");
-            return -ERROR_FAIL;
+            goto out;
         }
         config_data = xrealloc(config_data,
                                config_len + strlen(extra_config) + 2);
         if (!config_data) {
             fprintf(stderr, "Failed to realloc config_data\n");
-            return -ERROR_FAIL;
+            goto out;
         }
         config_data[config_len] = 0;
         strcat(config_data, extra_config);
@@ -5662,13 +5663,13 @@ int main_cpupoolcreate(int argc, char **
     config = xlu_cfg_init(stderr, config_src);
     if (!config) {
         fprintf(stderr, "Failed to allocate for configuration\n");
-        return -ERROR_FAIL;
+        goto out;
     }
 
     ret = xlu_cfg_readdata(config, config_data, config_len);
     if (ret) {
         fprintf(stderr, "Failed to parse config file: %s\n", strerror(ret));
-        return -ERROR_FAIL;
+        goto out_cfg;
     }
 
     if (!xlu_cfg_get_string (config, "name", &buf, 0))
@@ -5677,32 +5678,32 @@ int main_cpupoolcreate(int argc, char **
         name = libxl_basename(filename);
     else {
         fprintf(stderr, "Missing cpupool name!\n");
-        return -ERROR_FAIL;
+        goto out_cfg;
     }
     if (!libxl_name_to_cpupoolid(ctx, name, &poolid)) {
         fprintf(stderr, "Pool name \"%s\" already exists\n", name);
-        return -ERROR_FAIL;
+        goto out_cfg;
     }
 
     if (!xlu_cfg_get_string (config, "sched", &buf, 0)) {
         if ((libxl_scheduler_from_string(buf, &sched)) < 0) {
             fprintf(stderr, "Unknown scheduler\n");
-            return -ERROR_FAIL;
+            goto out_cfg;
         }
     } else {
         if ((sched = libxl_get_scheduler(ctx)) < 0) {
             fprintf(stderr, "get_scheduler sysctl failed.\n");
-            return -ERROR_FAIL;
+            goto out_cfg;
         }
     }
 
     if (libxl_get_freecpus(ctx, &freemap)) {
         fprintf(stderr, "libxl_get_freecpus failed\n");
-        return -ERROR_FAIL;
+        goto out_cfg;
     }
     if (libxl_cpumap_alloc(ctx, &cpumap)) {
         fprintf(stderr, "Failed to allocate cpumap\n");
-        return -ERROR_FAIL;
+        goto out_cfg;
     }
     if (!xlu_cfg_get_list(config, "nodes", &nodes, 0, 0)) {
         int nr;
@@ -5711,7 +5712,7 @@ int main_cpupoolcreate(int argc, char **
         topology = libxl_get_cpu_topology(ctx, &nr);
         if (topology == NULL) {
             fprintf(stderr, "libxl_get_topologyinfo failed\n");
-            return -ERROR_FAIL;
+            goto out_cfg;
         }
         while ((buf = xlu_cfg_get_listitem(nodes, n_nodes)) != NULL) {
             n = atoi(buf);
@@ -5729,7 +5730,7 @@ int main_cpupoolcreate(int argc, char **
 
         if (n_cpus == 0) {
             fprintf(stderr, "no free cpu found\n");
-            return -ERROR_FAIL;
+            goto out_cfg;
         }
     } else if (!xlu_cfg_get_list(config, "cpus", &cpus, 0, 0)) {
         n_cpus = 0;
@@ -5738,7 +5739,7 @@ int main_cpupoolcreate(int argc, char **
             if ((i < 0) || (i >= freemap.size * 8) ||
                 !libxl_cpumap_test(&freemap, i)) {
                 fprintf(stderr, "cpu %d illegal or not free\n", i);
-                return -ERROR_FAIL;
+                goto out_cfg;
             }
             libxl_cpumap_set(&cpumap, i);
             n_cpus++;
@@ -5753,16 +5754,20 @@ int main_cpupoolcreate(int argc, char **
     printf("scheduler:      %s\n", libxl_scheduler_to_string(sched));
     printf("number of cpus: %d\n", n_cpus);
 
-    if (dryrun_only)
-        return 0;
-
-    poolid = 0;
-    if (libxl_cpupool_create(ctx, name, sched, cpumap, &uuid, &poolid)) {
-        fprintf(stderr, "error on creating cpupool\n");
-        return -ERROR_FAIL;
-    }
-
-    return 0;
+    if (!dryrun_only) {
+        poolid = 0;
+        if (libxl_cpupool_create(ctx, name, sched, cpumap, &uuid, &poolid)) {
+            fprintf(stderr, "error on creating cpupool\n");
+            goto out_cfg;
+        }
+    }
+    /* We made it! */
+    rc = 0;
+   
+out_cfg:
+    xlu_cfg_destroy(config);
+out:
+    return rc;
 }
 
 int main_cpupoollist(int argc, char **argv)

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.