chiark / gitweb /
logind: ensure our autovts always stay allocated
[elogind.git] / src / logind-seat.c
index 26c2bd4f5e91d11766647e36a87a1a485a0f4708..ed67bc9eea8d4fc89a354e97d02cd67e941c6545 100644 (file)
@@ -86,6 +86,9 @@ int seat_save(Seat *s) {
 
         assert(s);
 
+        if (!s->started)
+                return 0;
+
         r = safe_mkdir("/run/systemd/seats", 0755, 0, 0);
         if (r < 0)
                 goto finish;
@@ -183,20 +186,22 @@ static int vt_allocate(int vtnr) {
         return r;
 }
 
-static int seat_preallocate_vts(Seat *s) {
+int seat_preallocate_vts(Seat *s) {
         int r = 0;
         unsigned i;
 
         assert(s);
         assert(s->manager);
 
+        log_debug("Preallocating VTs...");
+
         if (s->manager->n_autovts <= 0)
                 return 0;
 
         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);
@@ -350,18 +355,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;