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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user