From fb6becb4436ae4078337011b2017ce294e7361cf Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 2 Jul 2013 01:46:30 +0200 Subject: logind: port over to use scopes+slices for all cgroup stuff In order to prepare things for the single-writer cgroup scheme, let's make logind use systemd's own primitives for cgroup management. Every login user now gets his own private slice unit, in which his sessions live in a scope unit each. Also, add user@$UID.service to the same slice, and implicitly start it on first login. --- src/shared/unit-name.c | 27 +++++++++++++++++++++++++++ src/shared/unit-name.h | 2 ++ 2 files changed, 29 insertions(+) (limited to 'src/shared') diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c index 7733aae0e7..1baa6eb7e5 100644 --- a/src/shared/unit-name.c +++ b/src/shared/unit-name.c @@ -565,3 +565,30 @@ UnitType unit_name_to_type(const char *n) { return unit_type_from_string(e + 1); } + +int build_subslice(const char *slice, const char*name, char **subslice) { + char *ret; + + assert(slice); + assert(name); + assert(subslice); + + if (streq(slice, "-.slice")) + ret = strappend(name, ".slice"); + else { + char *e; + + e = endswith(slice, ".slice"); + if (!e) + return -EINVAL; + + ret = new(char, (e - slice) + 1 + strlen(name) + 6 + 1); + if (!ret) + return -ENOMEM; + + stpcpy(stpcpy(stpcpy(mempcpy(ret, slice, e - slice), "-"), name), ".slice"); + } + + *subslice = ret; + return 0; +} diff --git a/src/shared/unit-name.h b/src/shared/unit-name.h index 7f4ae56433..20138df089 100644 --- a/src/shared/unit-name.h +++ b/src/shared/unit-name.h @@ -99,3 +99,5 @@ int unit_name_from_dbus_path(const char *path, char **name); char *unit_name_mangle(const char *name); char *unit_name_mangle_with_suffix(const char *name, const char *suffix); + +int build_subslice(const char *slice, const char*name, char **subslice); -- cgit v1.2.3-54-g00ecf