]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Cleanup if creating cgroup directories fails
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 3 Apr 2013 17:08:41 +0000 (18:08 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 15 Apr 2013 16:35:31 +0000 (17:35 +0100)
Currently if virCgroupMakeGroup fails, we can get in a situation
where some controllers have been setup, but others not. Ensure
we call virCgroupRemove to remove what we've done upon failure

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
src/util/vircgroup.c

index 6ff767f27ed18b43c7c6423f3c137ea65194056c..cabe2fe61256ec2c0aef19228314d96cf18ca648 100644 (file)
@@ -1082,8 +1082,10 @@ int virCgroupNewDriver(const char *name,
     rc = virCgroupNew(name, rootgrp, -1, group);
     if (rc == 0) {
         rc = virCgroupMakeGroup(rootgrp, *group, create, VIR_CGROUP_NONE);
-        if (rc != 0)
+        if (rc != 0) {
+            virCgroupRemove(*group);
             virCgroupFree(group);
+        }
     }
 out:
     virCgroupFree(&rootgrp);
@@ -1155,8 +1157,10 @@ int virCgroupNewDomain(virCgroupPtr driver,
          * cumulative usage that we don't need.
          */
         rc = virCgroupMakeGroup(driver, *group, create, VIR_CGROUP_MEM_HIERACHY);
-        if (rc != 0)
+        if (rc != 0) {
+            virCgroupRemove(*group);
             virCgroupFree(group);
+        }
     }
 
     return rc;
@@ -1203,8 +1207,10 @@ int virCgroupNewVcpu(virCgroupPtr domain,
 
     if (rc == 0) {
         rc = virCgroupMakeGroup(domain, *group, create, VIR_CGROUP_NONE);
-        if (rc != 0)
+        if (rc != 0) {
+            virCgroupRemove(*group);
             virCgroupFree(group);
+        }
     }
 
     return rc;
@@ -1244,8 +1250,10 @@ int virCgroupNewEmulator(virCgroupPtr domain,
 
     if (rc == 0) {
         rc = virCgroupMakeGroup(domain, *group, create, VIR_CGROUP_NONE);
-        if (rc != 0)
+        if (rc != 0) {
+            virCgroupRemove(*group);
             virCgroupFree(group);
+        }
     }
 
     return rc;