chiark / gitweb /
systemctl: don't show cgroup field for a unit if cgroup is empty
authorLennart Poettering <lennart@poettering.net>
Sun, 23 Dec 2012 10:56:13 +0000 (11:56 +0100)
committerLennart Poettering <lennart@poettering.net>
Sun, 23 Dec 2012 23:29:39 +0000 (00:29 +0100)
src/shared/cgroup-show.c
src/shared/cgroup-util.c
src/shared/cgroup-util.h
src/systemctl/systemctl.c

index 437d097..2b79f37 100644 (file)
@@ -335,7 +335,7 @@ int show_cgroup_and_extra(const char *controller, const char *path, const char *
 
 int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids) {
         int r;
-        char *controller, *path;
+        _cleanup_free_ char *controller = NULL, *path = NULL;
 
         assert(spec);
 
@@ -343,9 +343,5 @@ int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned
         if (r < 0)
                 return r;
 
-        r = show_cgroup_and_extra(controller, path, prefix, n_columns, kernel_threads, all, extra_pids, n_extra_pids);
-        free(controller);
-        free(path);
-
-        return r;
+        return show_cgroup_and_extra(controller, path, prefix, n_columns, kernel_threads, all, extra_pids, n_extra_pids);
 }
index b0d378d..18cbf04 100644 (file)
@@ -934,6 +934,20 @@ int cg_is_empty(const char *controller, const char *path, bool ignore_self) {
         return !found;
 }
 
+int cg_is_empty_by_spec(const char *spec, bool ignore_self) {
+        int r;
+        _cleanup_free_ char *controller = NULL, *path = NULL;
+
+        assert(spec);
+
+        r = cg_split_spec(spec, &controller, &path);
+        if (r < 0)
+                return r;
+
+        return cg_is_empty(controller, path, ignore_self);
+}
+
+
 int cg_is_empty_recursive(const char *controller, const char *path, bool ignore_self) {
         int r;
         DIR *d = NULL;
index 697669d..af2efc3 100644 (file)
@@ -65,6 +65,7 @@ int cg_set_task_access(const char *controller, const char *path, mode_t mode, ui
 int cg_install_release_agent(const char *controller, const char *agent);
 
 int cg_is_empty(const char *controller, const char *path, bool ignore_self);
+int cg_is_empty_by_spec(const char *spec, bool ignore_self);
 int cg_is_empty_recursive(const char *controller, const char *path, bool ignore_self);
 
 int cg_get_user_path(char **path);
index 3abd7dc..876e782 100644 (file)
@@ -2265,7 +2265,8 @@ static void print_status_info(UnitStatusInfo *i) {
         if (i->status_text)
                 printf("\t  Status: \"%s\"\n", i->status_text);
 
-        if (i->default_control_group) {
+        if (i->default_control_group &&
+            (i->main_pid > 0 || i->control_pid > 0 || cg_is_empty_by_spec(i->default_control_group, false) == 0)) {
                 unsigned c;
 
                 printf("\t  CGroup: %s\n", i->default_control_group);