X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogind-seat.c;h=df91cd0d8a53ebc057dd77a197bc84e11be8953c;hb=e9816c4859454d341279f1c9e77df4af4bacd534;hp=09356b6b09488fba05f903ba02d0db118532873d;hpb=9418f14772e7e646fe981d45506b3bbce68d6ccf;p=elogind.git diff --git a/src/logind-seat.c b/src/logind-seat.c index 09356b6b0..df91cd0d8 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; @@ -230,8 +233,7 @@ int seat_set_active(Seat *s, Session *session) { Session *old_active; assert(s); - assert(session); - assert(session->seat == s); + assert(!session || session->seat == s); if (session == s->active) return 0; @@ -247,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; } @@ -343,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;