X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flogind-user.c;h=dacf148f7829e603c2224447408054e8cb052a58;hp=63033e0fd3a37e299b808b87814df44ff4e1a29c;hb=69fc152fc133172433d2bacb6a1fb8b97b866e9d;hpb=ed18b08bed983b845c72a83666a7d7db546d89ad diff --git a/src/logind-user.c b/src/logind-user.c index 63033e0fd..dacf148f7 100644 --- a/src/logind-user.c +++ b/src/logind-user.c @@ -94,6 +94,9 @@ int user_save(User *u) { assert(u); assert(u->state_file); + if (!u->started) + return 0; + r = safe_mkdir("/run/systemd/users", 0755, 0, 0); if (r < 0) goto finish; @@ -177,7 +180,7 @@ int user_load(User *u) { free(display); } - if (s && s->display && x11_display_is_local(s->display)) + if (s && s->display && display_is_local(s->display)) u->display = s; return r; @@ -234,15 +237,19 @@ static int user_create_cgroup(User *u) { r = cg_create(SYSTEMD_CGROUP_CONTROLLER, p); if (r < 0) { + log_error("Failed to create cgroup "SYSTEMD_CGROUP_CONTROLLER":%s: %s", p, strerror(-r)); free(p); u->cgroup_path = NULL; - log_error("Failed to create cgroup "SYSTEMD_CGROUP_CONTROLLER":%s: %s", p, strerror(-r)); return r; } u->cgroup_path = p; STRV_FOREACH(k, u->manager->controllers) { + + if (strv_contains(u->manager->reset_controllers, *k)) + continue; + r = cg_create(*k, p); if (r < 0) log_warning("Failed to create cgroup %s:%s: %s", *k, p, strerror(-r)); @@ -282,13 +289,13 @@ int user_start(User *u) { if (r < 0) return r; - /* Save new user data */ - user_save(u); - dual_timestamp_get(&u->timestamp); u->started = true; + /* Save new user data */ + user_save(u); + user_send_signal(u, true); return 0; @@ -450,12 +457,15 @@ int user_get_idle_hint(User *u, dual_timestamp *t) { return idle_hint; } -int user_check_gc(User *u) { +int user_check_gc(User *u, bool drop_not_started) { int r; char *p; assert(u); + if (drop_not_started && !u->started) + return 0; + if (u->sessions) return 1;