]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/cgroup-show: extract funtion to query unit cgroup path
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 1 Feb 2017 19:30:57 +0000 (14:30 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 2 Feb 2017 01:31:50 +0000 (20:31 -0500)
…and use it where possible.

src/cgls/cgls.c
src/login/loginctl.c
src/machine/machinectl.c
src/shared/cgroup-show.c
src/shared/cgroup-show.h

index 1d21c1c20ce3f8ceff2de7024b824b459f468f16..b8af4680f979863c12cc141651f8fb944fbbdfc8 100644 (file)
@@ -26,7 +26,6 @@
 #include "sd-bus.h"
 
 #include "alloc-util.h"
-#include "bus-error.h"
 #include "bus-util.h"
 #include "cgroup-show.h"
 #include "cgroup-util.h"
index 4c618ed19ef30052052c6af61caa5d47c022b82a..1aac7ae9793564cba8a8a3a504cec33689e37bfb 100644 (file)
@@ -240,7 +240,6 @@ static int list_seats(int argc, char *argv[], void *userdata) {
         sd_bus *bus = userdata;
         unsigned k = 0;
         int r;
-
         assert(bus);
         assert(argv);
 
@@ -280,35 +279,17 @@ static int list_seats(int argc, char *argv[], void *userdata) {
 }
 
 static int show_unit_cgroup(sd_bus *bus, const char *interface, const char *unit, pid_t leader) {
+        _cleanup_free_ char *cgroup = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        _cleanup_free_ char *path = NULL;
-        const char *cgroup;
         unsigned c;
         int r;
 
         assert(bus);
         assert(unit);
 
-        path = unit_dbus_path_from_name(unit);
-        if (!path)
-                return log_oom();
-
-        r = sd_bus_get_property(
-                        bus,
-                        "org.freedesktop.systemd1",
-                        path,
-                        interface,
-                        "ControlGroup",
-                        &error,
-                        &reply,
-                        "s");
-        if (r < 0)
-                return log_error_errno(r, "Failed to query ControlGroup: %s", bus_error_message(&error, r));
-
-        r = sd_bus_message_read(reply, "s", &cgroup);
+        r = show_cgroup_get_unit_path_and_warn(bus, unit, &cgroup);
         if (r < 0)
-                return bus_log_parse_error(r);
+                return r;
 
         if (isempty(cgroup))
                 return 0;
index 31a40d47c378660e4cb6acdd94a4235b8fdb5027..4f5f659c7cdefe875837f9365add664f5b13e4bd 100644 (file)
@@ -477,35 +477,17 @@ static int list_images(int argc, char *argv[], void *userdata) {
 }
 
 static int show_unit_cgroup(sd_bus *bus, const char *unit, pid_t leader) {
+        _cleanup_free_ char *cgroup = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        _cleanup_free_ char *path = NULL;
-        const char *cgroup;
         int r;
         unsigned c;
 
         assert(bus);
         assert(unit);
 
-        path = unit_dbus_path_from_name(unit);
-        if (!path)
-                return log_oom();
-
-        r = sd_bus_get_property(
-                        bus,
-                        "org.freedesktop.systemd1",
-                        path,
-                        unit_dbus_interface_from_name(unit),
-                        "ControlGroup",
-                        &error,
-                        &reply,
-                        "s");
-        if (r < 0)
-                return log_error_errno(r, "Failed to query ControlGroup: %s", bus_error_message(&error, r));
-
-        r = sd_bus_message_read(reply, "s", &cgroup);
+        r = show_cgroup_get_unit_path_and_warn(bus, unit, &cgroup);
         if (r < 0)
-                return bus_log_parse_error(r);
+                return r;
 
         if (isempty(cgroup))
                 return 0;
index c9815f22ac6963e7c777d2ea10bd6761f24fd1e3..8765cf2f49d4997e06b4ab044c1c355eefbe7580 100644 (file)
@@ -317,6 +317,34 @@ int show_cgroup_and_extra_by_spec(
         return show_cgroup_and_extra(controller, path, prefix, n_columns, extra_pids, n_extra_pids, flags);
 }
 
+int show_cgroup_get_unit_path_and_warn(
+                sd_bus *bus,
+                const char *unit,
+                char **ret) {
+
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_free_ char *path = NULL;
+        int r;
+
+        path = unit_dbus_path_from_name(unit);
+        if (!path)
+                return log_oom();
+
+        r = sd_bus_get_property_string(
+                        bus,
+                        "org.freedesktop.systemd1",
+                        path,
+                        unit_dbus_interface_from_name(unit),
+                        "ControlGroup",
+                        &error,
+                        ret);
+        if (r < 0)
+                return log_error_errno(r, "Failed to query unit control group path: %s",
+                                       bus_error_message(&error, r));
+
+        return 0;
+}
+
 int show_cgroup_get_path_and_warn(
                 const char *machine,
                 const char *prefix,
@@ -326,9 +354,8 @@ int show_cgroup_get_path_and_warn(
         _cleanup_free_ char *root = NULL;
 
         if (machine) {
-                _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
                 _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-                _cleanup_free_ char *unit = NULL, *path = NULL;
+                _cleanup_free_ char *unit = NULL;
                 const char *m;
 
                 m = strjoina("/run/systemd/machines/", machine);
@@ -336,25 +363,13 @@ int show_cgroup_get_path_and_warn(
                 if (r < 0)
                         return log_error_errno(r, "Failed to load machine data: %m");
 
-                path = unit_dbus_path_from_name(unit);
-                if (!path)
-                        return log_oom();
-
                 r = bus_connect_transport_systemd(BUS_TRANSPORT_LOCAL, NULL, false, &bus);
                 if (r < 0)
                         return log_error_errno(r, "Failed to create bus connection: %m");
 
-                r = sd_bus_get_property_string(
-                                bus,
-                                "org.freedesktop.systemd1",
-                                path,
-                                unit_dbus_interface_from_name(unit),
-                                "ControlGroup",
-                                &error,
-                                &root);
+                r = show_cgroup_get_unit_path_and_warn(bus, unit, &root);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to query unit control group path: %s",
-                                               bus_error_message(&error, r));
+                        return r;
         } else {
                 r = cg_get_root_path(&root);
                 if (r == -ENOMEDIUM)
index 1445c05f1f21db4f3919149b305ad527f9772e69..736f0f34c88ff528a730c7566a07110e2b6b7b42 100644 (file)
@@ -22,6 +22,8 @@
 #include <stdbool.h>
 #include <sys/types.h>
 
+#include <systemd/sd-bus.h>
+
 #include "logs-show.h"
 #include "output-mode.h"
 
@@ -31,6 +33,10 @@ int show_cgroup(const char *controller, const char *path, const char *prefix, un
 int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags);
 int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags);
 
+int show_cgroup_get_unit_path_and_warn(
+                sd_bus *bus,
+                const char *unit,
+                char **ret);
 int show_cgroup_get_path_and_warn(
                 const char *machine,
                 const char *prefix,