diff options
Diffstat (limited to 'src/login')
-rw-r--r-- | src/login/logind.c | 13 | ||||
-rw-r--r-- | src/login/logind.h | 14 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/login/logind.c b/src/login/logind.c index de6fbfbd4..586d92fca 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -35,6 +35,7 @@ #include "formats-util.h" #include "label.h" #include "label.h" +#include "cgroup.h" static void manager_free(Manager *m); @@ -46,6 +47,8 @@ static Manager *manager_new(void) { if (!m) return NULL; + m->pin_cgroupfs_fd = -1; + m->console_active_fd = -1; m->reserve_vt_fd = -1; @@ -77,6 +80,9 @@ static Manager *manager_new(void) { m->user_units = hashmap_new(&string_hash_ops); m->session_units = hashmap_new(&string_hash_ops); + m->running_as = MANAGER_SYSTEM; + m->test_run = false; + if (!m->devices || !m->seats || !m->sessions || !m->users || !m->inhibitors || !m->buttons || !m->user_units || !m->session_units) goto fail; @@ -84,6 +90,11 @@ static Manager *manager_new(void) { if (!m->kill_exclude_users) goto fail; + /* Make cgroups */ + r = manager_setup_cgroup(m); + if (r < 0) + goto fail; + m->udev = udev_new(); if (!m->udev) goto fail; @@ -171,6 +182,8 @@ static void manager_free(Manager *m) { safe_close(m->reserve_vt_fd); + manager_shutdown_cgroup(m, true); + strv_free(m->kill_only_users); strv_free(m->kill_exclude_users); diff --git a/src/login/logind.h b/src/login/logind.h index 306709e5b..c0ae52359 100644 --- a/src/login/logind.h +++ b/src/login/logind.h @@ -27,6 +27,8 @@ #include "config.h" #include "sd-event.h" #include "sd-bus.h" +#include "cgroup-util.h" +#include "path-lookup.h" #include "list.h" #include "hashmap.h" #include "set.h" @@ -62,6 +64,18 @@ struct Manager { sd_event_source *udev_vcsa_event_source; sd_event_source *udev_button_event_source; + /* Make sure the user cannot accidentally unmount our cgroup + * file system */ + int pin_cgroupfs_fd; + + /* Flags */ + ManagerRunningAs running_as; + bool test_run:1; + + /* Data specific to the cgroup subsystem */ + CGroupMask cgroup_supported; + char *cgroup_root; + int console_active_fd; unsigned n_autovts; |