Blame SOURCES/0010-manager-start-login-screen-if-old-one-is-finished.patch

400dab
From 2ec1b65c7bc2cefeabbd9a7a3a50436e1233804c Mon Sep 17 00:00:00 2001
400dab
From: Ray Strode <rstrode@redhat.com>
400dab
Date: Fri, 22 Jun 2018 14:55:39 -0400
400dab
Subject: [PATCH 10/51] manager: start login screen if old one is finished
400dab
400dab
Since commit 22c332ba we try to start a login screen if we end up
400dab
on an empty VT and there isn't one running.
400dab
400dab
Unfortunately the check for "is on an empty VT" is a little busted.
400dab
It counts the VT has non-empty if there's a display associated with
400dab
it, even if that display is in the FINISHED state about to be
400dab
reaped.
400dab
400dab
That means, in some cases, we'll still leave the user on an empty
400dab
VT with no login screen.
400dab
400dab
This commit addresses the problem by explicitly checking for
400dab
FINISHED displays, and proceeding even in their presense.
400dab
---
400dab
 daemon/gdm-manager.c | 2 +-
400dab
 1 file changed, 1 insertion(+), 1 deletion(-)
400dab
400dab
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
400dab
index a4dad92ee..a6f13dec7 100644
400dab
--- a/daemon/gdm-manager.c
400dab
+++ b/daemon/gdm-manager.c
400dab
@@ -1444,61 +1444,61 @@ activate_login_window_session_on_seat (GdmManager *self,
400dab
                 return;
400dab
         }
400dab
 
400dab
         if (session_id) {
400dab
                 activate_session_id (self, seat_id, session_id);
400dab
                 g_free (session_id);
400dab
         }
400dab
 }
400dab
 
400dab
 static void
400dab
 maybe_activate_other_session (GdmManager *self,
400dab
                               GdmDisplay *old_display)
400dab
 {
400dab
         char *seat_id = NULL;
400dab
         char *session_id = NULL;
400dab
         int ret;
400dab
 
400dab
         g_object_get (G_OBJECT (old_display),
400dab
                       "seat-id", &seat_id,
400dab
                       NULL);
400dab
 
400dab
         ret = sd_seat_get_active (seat_id, &session_id, NULL);
400dab
 
400dab
         if (ret == 0) {
400dab
                 GdmDisplay *display;
400dab
 
400dab
                 display = gdm_display_store_find (self->priv->display_store,
400dab
                                                   lookup_by_session_id,
400dab
                                                   (gpointer) session_id);
400dab
 
400dab
-                if (display == NULL) {
400dab
+                if (display == NULL || gdm_display_get_status (display) == GDM_DISPLAY_FINISHED) {
400dab
                         activate_login_window_session_on_seat (self, seat_id);
400dab
                 }
400dab
 
400dab
                 g_free (session_id);
400dab
         }
400dab
 
400dab
         g_free (seat_id);
400dab
 }
400dab
 
400dab
 static const char *
400dab
 get_username_for_greeter_display (GdmManager *manager,
400dab
                                   GdmDisplay *display)
400dab
 {
400dab
         gboolean doing_initial_setup = FALSE;
400dab
 
400dab
         g_object_get (G_OBJECT (display),
400dab
                       "doing-initial-setup", &doing_initial_setup,
400dab
                       NULL);
400dab
 
400dab
         if (doing_initial_setup) {
400dab
                 return INITIAL_SETUP_USERNAME;
400dab
         } else {
400dab
                 return GDM_USERNAME;
400dab
         }
400dab
 }
400dab
 
400dab
 static void
400dab
 set_up_automatic_login_session (GdmManager *manager,
400dab
                                 GdmDisplay *display)
400dab
 {
400dab
-- 
400dab
2.27.0
400dab