chiark / gitweb /
logind: check whether newly created session is active
[elogind.git] / src / logind-seat.c
index 09356b6b09488fba05f903ba02d0db118532873d..df91cd0d8a53ebc057dd77a197bc84e11be8953c 100644 (file)
@@ -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;