chiark / gitweb /
systemctl: show cgroup tree if cgroup is empty but has non-empty children
[elogind.git] / src / systemctl / systemctl.c
index fde3f43a174839c2d3400a544199ae1c8b89739b..2ea5a3b0d8f19e9dfd937b40ad510b307794a783 100644 (file)
@@ -1454,8 +1454,9 @@ static int cancel_job(DBusConnection *bus, char **args) {
         return 0;
 }
 
-static bool need_daemon_reload(DBusConnection *bus, const char *unit) {
+static int need_daemon_reload(DBusConnection *bus, const char *unit) {
         _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
+        _cleanup_dbus_error_free_ DBusError error;
         dbus_bool_t b = FALSE;
         DBusMessageIter iter, sub;
         const char
@@ -1465,6 +1466,8 @@ static bool need_daemon_reload(DBusConnection *bus, const char *unit) {
         _cleanup_free_ char *n = NULL;
         int r;
 
+        dbus_error_init(&error);
+
         /* We ignore all errors here, since this is used to show a warning only */
 
         n = unit_name_mangle(unit);
@@ -1478,7 +1481,7 @@ static bool need_daemon_reload(DBusConnection *bus, const char *unit) {
                         "org.freedesktop.systemd1.Manager",
                         "GetUnit",
                         &reply,
-                        NULL,
+                        &error,
                         DBUS_TYPE_STRING, &n,
                         DBUS_TYPE_INVALID);
         if (r < 0)
@@ -1499,7 +1502,7 @@ static bool need_daemon_reload(DBusConnection *bus, const char *unit) {
                         "org.freedesktop.DBus.Properties",
                         "Get",
                         &reply,
-                        NULL,
+                        &error,
                         DBUS_TYPE_STRING, &interface,
                         DBUS_TYPE_STRING, &property,
                         DBUS_TYPE_INVALID);
@@ -1565,7 +1568,7 @@ static DBusHandlerResult wait_filter(DBusConnection *connection, DBusMessage *me
 
                         return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
                 }
-#ifndef LEGACY
+#ifndef NOLEGACY
                 dbus_error_free(&error);
                 if (dbus_message_get_args(message, &error,
                                           DBUS_TYPE_UINT32, &id,
@@ -1919,7 +1922,7 @@ static int start_unit_one(
                 return -EIO;
         }
 
-        if (need_daemon_reload(bus, n))
+        if (need_daemon_reload(bus, n) > 0)
                 log_warning("Warning: Unit file of %s changed on disk, 'systemctl %sdaemon-reload' recommended.",
                             n, arg_scope == UNIT_FILE_SYSTEM ? "" : "--user ");
 
@@ -2785,7 +2788,7 @@ static void print_status_info(UnitStatusInfo *i) {
                 printf("   Status: \"%s\"\n", i->status_text);
 
         if (i->control_group &&
-            (i->main_pid > 0 || i->control_pid > 0 || cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, i->control_group, false) == 0)) {
+            (i->main_pid > 0 || i->control_pid > 0 || cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, i->control_group, false) == 0)) {
                 unsigned c;
 
                 printf("   CGroup: %s\n", i->control_group);
@@ -2916,7 +2919,7 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn
                                 i->fragment_path = s;
                         else if (streq(name, "SourcePath"))
                                 i->source_path = s;
-#ifndef LEGACY
+#ifndef NOLEGACY
                         else if (streq(name, "DefaultControlGroup")) {
                                 const char *e;
                                 e = startswith(s, SYSTEMD_CGROUP_CONTROLLER ":");
@@ -3444,7 +3447,7 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo
                         r = 1;
                 else
                         r = 3;
-       }
+        }
 
         while ((p = info.exec)) {
                 LIST_REMOVE(ExecStatusInfo, exec, info.exec, p);
@@ -3806,7 +3809,7 @@ static int snapshot(DBusConnection *bus, char **args) {
         if (!n)
                 return log_oom();
 
-        r = bus_method_call_with_reply (
+        r = bus_method_call_with_reply(
                         bus,
                         "org.freedesktop.systemd1",
                         "/org/freedesktop/systemd1",
@@ -3935,9 +3938,9 @@ static int daemon_reload(DBusConnection *bus, char **args) {
                 /* There's always a fallback possible for
                  * legacy actions. */
                 r = -EADDRNOTAVAIL;
-        else if (r == -ETIMEDOUT && streq(method, "Reexecute"))
-                /* On reexecution, we expect a disconnect, not
-                 * reply */
+        else if ((r == -ETIMEDOUT || r == -ECONNRESET) && streq(method, "Reexecute"))
+                /* On reexecution, we expect a disconnect, not a
+                 * reply */
                 r = 0;
         else if (r < 0)
                 log_error("Failed to issue method call: %s", bus_error_message(&error));