chiark / gitweb /
logind: Properly list the ACTIVE_SEATS in the user session tracking file.
[elogind.git] / src / login / logind-user.c
index aa9c3f1a319abe4cd79e96a66b444d1984d51a1b..a6672ce670acd7180bec825de3c3766cc9c1d8a3 100644 (file)
@@ -189,7 +189,9 @@ int user_save(User *u) {
                         if (first)
                                 first = false;
                         else
-                                fputs(i->seat->id, f);
+                                fputc(' ', f);
+
+                        fputs(i->seat->id, f);
                 }
                 fputc('\n', f);
         }
@@ -568,15 +570,20 @@ void user_add_to_gc_queue(User *u) {
 
 UserState user_get_state(User *u) {
         Session *i;
+        bool all_closing = true;
 
         assert(u);
 
-        LIST_FOREACH(sessions_by_user, i, u->sessions)
+
+        LIST_FOREACH(sessions_by_user, i, u->sessions) {
                 if (session_is_active(i))
                         return USER_ACTIVE;
+                if (session_get_state(i) != SESSION_CLOSING)
+                        all_closing = false;
+        }
 
         if (u->sessions)
-                return USER_ONLINE;
+                return all_closing ? USER_CLOSING : USER_ONLINE;
 
         if (user_check_linger_file(u) > 0)
                 return USER_LINGERING;