X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fdbus-scope.c;h=783a969fb3438e5c09b8350877db68f78746d0bd;hb=3731acf1acfb4a6eb68374a5b137f3b368f63381;hp=604d1479457e535c995d9ed5d6cc3c5eb2dd6955;hpb=9f2e86af0600e99cff00d1c92f9bb8d38f29896a;p=elogind.git diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c index 604d14794..783a969fb 100644 --- a/src/core/dbus-scope.c +++ b/src/core/dbus-scope.c @@ -30,6 +30,7 @@ #define BUS_SCOPE_INTERFACE \ " \n" \ + BUS_UNIT_CGROUP_INTERFACE \ " \n" \ BUS_KILL_CONTEXT_INTERFACE \ BUS_CGROUP_CONTEXT_INTERFACE \ @@ -65,6 +66,7 @@ DBusHandlerResult bus_scope_message_handler(Unit *u, DBusConnection *c, DBusMess const BusBoundProperties bps[] = { { "org.freedesktop.systemd1.Unit", bus_unit_properties, u }, + { "org.freedesktop.systemd1.Scope", bus_unit_cgroup_properties, u }, { "org.freedesktop.systemd1.Scope", bus_scope_properties, s }, { "org.freedesktop.systemd1.Scope", bus_cgroup_context_properties, &s->cgroup_context }, { "org.freedesktop.systemd1.Scope", bus_kill_context_properties, &s->kill_context }, @@ -91,6 +93,7 @@ static int bus_scope_set_transient_property( if (streq(name, "PIDs")) { DBusMessageIter sub; + unsigned n = 0; if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_ARRAY || dbus_message_iter_get_element_type(i) != DBUS_TYPE_UINT32) @@ -109,17 +112,37 @@ static int bus_scope_set_transient_property( if (pid <= 1) return -EINVAL; - r = set_put(s->pids, LONG_TO_PTR(pid)); - if (r < 0 && r != -EEXIST) - return r; + if (mode != UNIT_CHECK) { + r = set_put(s->pids, LONG_TO_PTR(pid)); + if (r < 0 && r != -EEXIST) + return r; + } dbus_message_iter_next(&sub); + n++; } - if (set_size(s->pids) <= 0) + if (n <= 0) return -EINVAL; return 1; + + } else if (streq(name, "TimeoutStopUSec")) { + + if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_UINT64) + return -EINVAL; + + if (mode != UNIT_CHECK) { + uint64_t t; + + dbus_message_iter_get_basic(i, &t); + + s->timeout_stop_usec = t; + + unit_write_drop_in_format(UNIT(s), mode, name, "[Scope]\nTimeoutStopSec=%lluus\n", (unsigned long long) t); + } + + return 1; } return 0; @@ -149,6 +172,10 @@ int bus_scope_set_property( r = bus_scope_set_transient_property(s, name, i, mode, error); if (r != 0) return r; + + r = bus_kill_context_set_transient_property(u, &s->kill_context, name, i, mode, error); + if (r != 0) + return r; } return 0;