diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-02-01 14:30:57 -0500 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-02-01 20:31:50 -0500 |
commit | bc06be753346784e19151814b5b9c01c624317f2 (patch) | |
tree | 233cc31ce5b3fc827c08a2c01fb87ea9868005dc | |
parent | d3e8277d5004163c725a895778c3a9dce9ca091e (diff) |
shared/cgroup-show: extract funtion to query unit cgroup path
…and use it where possible.
-rw-r--r-- | src/cgls/cgls.c | 1 | ||||
-rw-r--r-- | src/login/loginctl.c | 25 | ||||
-rw-r--r-- | src/machine/machinectl.c | 24 | ||||
-rw-r--r-- | src/shared/cgroup-show.c | 47 | ||||
-rw-r--r-- | src/shared/cgroup-show.h | 6 |
5 files changed, 43 insertions, 60 deletions
diff --git a/src/cgls/cgls.c b/src/cgls/cgls.c index 1d21c1c20c..b8af4680f9 100644 --- a/src/cgls/cgls.c +++ b/src/cgls/cgls.c @@ -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" diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 4c618ed19e..1aac7ae979 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -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; diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index 31a40d47c3..4f5f659c7c 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -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; diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c index c9815f22ac..8765cf2f49 100644 --- a/src/shared/cgroup-show.c +++ b/src/shared/cgroup-show.c @@ -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) diff --git a/src/shared/cgroup-show.h b/src/shared/cgroup-show.h index 1445c05f1f..736f0f34c8 100644 --- a/src/shared/cgroup-show.h +++ b/src/shared/cgroup-show.h @@ -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, |