X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogind-session.c;h=8e35e09069c4b503035375238d2eee4ae2dca04d;hb=e9816c4859454d341279f1c9e77df4af4bacd534;hp=e71ff4f14e9aaca2ca5965653e4912ca4d8cb2ad;hpb=a91e4e5337a46db3f0a4f1415c1b60285e5c33a3;p=elogind.git diff --git a/src/logind-session.c b/src/logind-session.c index e71ff4f14..8e35e0906 100644 --- a/src/logind-session.c +++ b/src/logind-session.c @@ -111,6 +111,9 @@ int session_save(Session *s) { assert(s); + if (!s->started) + return 0; + r = safe_mkdir("/run/systemd/sessions", 0755, 0, 0); if (r < 0) goto finish; @@ -325,14 +328,6 @@ int session_activate(Session *s) { return seat_apply_acls(s->seat, old_active); } -bool x11_display_is_local(const char *display) { - assert(display); - - return - display[0] == ':' && - display[1] >= '0' && - display[1] <= '9'; -} static int session_link_x11_socket(Session *s) { char *t, *f, *c; @@ -345,7 +340,7 @@ static int session_link_x11_socket(Session *s) { if (s->user->display) return 0; - if (!s->display || !x11_display_is_local(s->display)) + if (!s->display || !display_is_local(s->display)) return 0; k = strspn(s->display+1, "0123456789"); @@ -413,9 +408,11 @@ static int session_create_one_group(Session *s, const char *controller, const ch assert(controller); assert(path); - if (s->leader > 0) + if (s->leader > 0) { r = cg_create_and_attach(controller, path, s->leader); - else + if (r < 0) + r = cg_create(controller, path); + } else r = cg_create(controller, path); if (r < 0) @@ -447,9 +444,9 @@ static int session_create_cgroup(Session *s) { r = session_create_one_group(s, SYSTEMD_CGROUP_CONTROLLER, p); if (r < 0) { + log_error("Failed to create "SYSTEMD_CGROUP_CONTROLLER":%s: %s", p, strerror(-r)); free(p); s->cgroup_path = NULL; - log_error("Failed to create "SYSTEMD_CGROUP_CONTROLLER":%s: %s", p, strerror(-r)); return r; } @@ -514,13 +511,16 @@ int session_start(Session *s) { /* Create X11 symlink */ session_link_x11_socket(s); - /* Save session data */ - session_save(s); - dual_timestamp_get(&s->timestamp); + if (s->seat) + seat_read_active_vt(s->seat); + s->started = true; + /* Save session data */ + session_save(s); + session_send_signal(s, true); if (s->seat) {