chiark / gitweb /
cgroup: only delete empty cgroups
[elogind.git] / cgroup.c
index 24bbe1aa15637132813c8cf6f747787455ecb3ac..565ce24ce18725159b9763d2e15f558cdbfb6f49 100644 (file)
--- a/cgroup.c
+++ b/cgroup.c
@@ -118,17 +118,15 @@ void cgroup_bonding_free(CGroupBonding *b) {
                         hashmap_remove(b->unit->meta.manager->cgroup_bondings, b->path);
         }
 
-        free(b->controller);
-        free(b->path);
-
         if (b->cgroup) {
-
-                if (b->only_us && b->clean_up)
-                        cgroup_delete_cgroup(b->cgroup, true);
+                if (b->only_us && b->clean_up && cgroup_bonding_is_empty(b) > 0)
+                        cgroup_delete_cgroup_ext(b->cgroup, true);
 
                 cgroup_free(&b->cgroup);
         }
 
+        free(b->controller);
+        free(b->path);
         free(b);
 }
 
@@ -540,3 +538,14 @@ CGroupBonding *cgroup_bonding_find_list(CGroupBonding *first, const char *contro
 
         return NULL;
 }
+
+char *cgroup_bonding_to_string(CGroupBonding *b) {
+        char *r;
+
+        assert(b);
+
+        if (asprintf(&r, "%s:%s", b->controller, b->path) < 0)
+                return NULL;
+
+        return r;
+}