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.
This commit is contained in:
Lennart Poettering
2013-07-02 01:48:55 +02:00
parent 358712f3de
commit fb6becb443
21 changed files with 1029 additions and 1129 deletions
+27
View File
@@ -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;
}
+2
View File
@@ -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);