X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogind-seat.c;h=bc695fea837f7daddd9e9393443e952deaec548f;hb=e7886786a6fec22fa770eb1554781d5f82c4b349;hp=12a1b806470efee273cc7a891c20d4afede58f3b;hpb=77527da0a02029ce9c5ec86d5db5ea42147a658f;p=elogind.git diff --git a/src/logind-seat.c b/src/logind-seat.c index 12a1b8064..bc695fea8 100644 --- a/src/logind-seat.c +++ b/src/logind-seat.c @@ -41,7 +41,7 @@ Seat *seat_new(Manager *m, const char *id) { if (!s) return NULL; - s->state_file = strappend("/run/systemd/seat/", id); + s->state_file = strappend("/run/systemd/seats/", id); if (!s->state_file) { free(s); return NULL; @@ -86,7 +86,10 @@ int seat_save(Seat *s) { assert(s); - r = safe_mkdir("/run/systemd/seat", 0755, 0, 0); + if (!s->started) + return 0; + + r = safe_mkdir("/run/systemd/seats", 0755, 0, 0); if (r < 0) goto finish; @@ -196,7 +199,7 @@ static int seat_preallocate_vts(Seat *s) { if (!seat_is_vtconsole(s)) return 0; - for (i = 1; i < s->manager->n_autovts; i++) { + for (i = 1; i <= s->manager->n_autovts; i++) { int q; q = vt_allocate(i); @@ -246,6 +249,14 @@ int seat_set_active(Seat *s, Session *session) { if (!session || session->started) seat_send_changed(s, "ActiveSession\0"); + seat_save(s); + + if (session) + session_save(session); + + if (old_active) + session_save(old_active); + return 0; } @@ -342,18 +353,17 @@ int seat_stop(Seat *s) { assert(s); - if (!s->started) - return 0; - - log_info("Removed seat %s.", s->id); - - seat_send_signal(s, false); + if (s->started) + log_info("Removed seat %s.", s->id); seat_stop_sessions(s); unlink(s->state_file); seat_add_to_gc_queue(s); + if (s->started) + seat_send_signal(s, false); + s->started = false; return r;