Blame SOURCES/0036-local-display-factory-Remove-same-VT-so-don-t-switch.patch

c90517
From f9021afe364c757e0f2f129987e5ca466f05f1c9 Mon Sep 17 00:00:00 2001
c90517
From: Ray Strode <rstrode@redhat.com>
c90517
Date: Tue, 25 Sep 2018 14:30:16 -0400
c90517
Subject: [PATCH 36/48] local-display-factory: Remove same VT so don't switch
c90517
 check
c90517
c90517
We avoid changing to the login screen vt if we're already on it,
c90517
but the call is racy since we react to vt changes concurrently
c90517
with logind (who we query for the active vt).
c90517
c90517
This check drops the active vt check since it's pointless and
c90517
getting in the way.
c90517
---
c90517
 daemon/gdm-local-display-factory.c | 39 ++++++++++--------------------
c90517
 1 file changed, 13 insertions(+), 26 deletions(-)
c90517
c90517
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
c90517
index 8e46dbca2..be7b43cff 100644
c90517
--- a/daemon/gdm-local-display-factory.c
c90517
+++ b/daemon/gdm-local-display-factory.c
c90517
@@ -410,103 +410,90 @@ lookup_by_seat_id (const char *id,
c90517
         res = g_strcmp0 (current, looking_for) == 0;
c90517
 
c90517
         g_free(current);
c90517
 
c90517
         return res;
c90517
 }
c90517
 
c90517
 static gboolean
c90517
 lookup_prepared_display_by_seat_id (const char *id,
c90517
                                     GdmDisplay *display,
c90517
                                     gpointer    user_data)
c90517
 {
c90517
         int status;
c90517
 
c90517
         status = gdm_display_get_status (display);
c90517
 
c90517
         if (status != GDM_DISPLAY_PREPARED)
c90517
                 return FALSE;
c90517
 
c90517
         return lookup_by_seat_id (id, display, user_data);
c90517
 }
c90517
 
c90517
 static GdmDisplay *
c90517
 create_display (GdmLocalDisplayFactory *factory,
c90517
                 const char             *seat_id,
c90517
                 const char             *session_type,
c90517
                 gboolean                initial)
c90517
 {
c90517
         GdmDisplayStore *store;
c90517
         GdmDisplay      *display = NULL;
c90517
-        char            *active_session_id = NULL;
c90517
-        int              ret;
c90517
+        g_autofree char *login_session_id = NULL;
c90517
 
c90517
         g_debug ("GdmLocalDisplayFactory: %s login display for seat %s requested",
c90517
                  session_type? : "X11", seat_id);
c90517
         store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
c90517
 
c90517
         if (sd_seat_can_multi_session (seat_id))
c90517
                 display = gdm_display_store_find (store, lookup_prepared_display_by_seat_id, (gpointer) seat_id);
c90517
         else
c90517
                 display = gdm_display_store_find (store, lookup_by_seat_id, (gpointer) seat_id);
c90517
 
c90517
         /* Ensure we don't create the same display more than once */
c90517
         if (display != NULL) {
c90517
                 g_debug ("GdmLocalDisplayFactory: display already created");
c90517
                 return NULL;
c90517
         }
c90517
 
c90517
-        ret = sd_seat_get_active (seat_id, &active_session_id, NULL);
c90517
-
c90517
-        if (ret == 0) {
c90517
-                char *login_session_id = NULL;
c90517
-
c90517
-                /* If we already have a login window, switch to it */
c90517
-                if (gdm_get_login_window_session_id (seat_id, &login_session_id)) {
c90517
-                        GdmDisplay *display;
c90517
-
c90517
-                        display = gdm_display_store_find (store,
c90517
-                                                          lookup_by_session_id,
c90517
-                                                          (gpointer) login_session_id);
c90517
-                        if (display != NULL && gdm_display_get_status (display) == GDM_DISPLAY_MANAGED) {
c90517
-                                if (g_strcmp0 (active_session_id, login_session_id) != 0) {
c90517
-                                        g_debug ("GdmLocalDisplayFactory: session %s found, activating.",
c90517
-                                                 login_session_id);
c90517
-                                        gdm_activate_session_by_id (factory->priv->connection, seat_id, login_session_id);
c90517
-                                }
c90517
-                                g_clear_pointer (&login_session_id, g_free);
c90517
-                                g_clear_pointer (&active_session_id, g_free);
c90517
-                                return NULL;
c90517
-                        }
c90517
-                        g_clear_pointer (&login_session_id, g_free);
c90517
+        /* If we already have a login window, switch to it */
c90517
+        if (gdm_get_login_window_session_id (seat_id, &login_session_id)) {
c90517
+                GdmDisplay *display;
c90517
+
c90517
+                display = gdm_display_store_find (store,
c90517
+                                                  lookup_by_session_id,
c90517
+                                                  (gpointer) login_session_id);
c90517
+                if (display != NULL && gdm_display_get_status (display) == GDM_DISPLAY_MANAGED) {
c90517
+                        g_debug ("GdmLocalDisplayFactory: session %s found, activating.",
c90517
+                                 login_session_id);
c90517
+                        gdm_activate_session_by_id (factory->priv->connection, seat_id, login_session_id);
c90517
+                        return NULL;
c90517
                 }
c90517
-                g_clear_pointer (&active_session_id, g_free);
c90517
         }
c90517
 
c90517
         g_debug ("GdmLocalDisplayFactory: Adding display on seat %s", seat_id);
c90517
 
c90517
 #ifdef ENABLE_USER_DISPLAY_SERVER
c90517
         if (g_strcmp0 (seat_id, "seat0") == 0) {
c90517
                 display = gdm_local_display_new ();
c90517
                 if (session_type != NULL) {
c90517
                         g_object_set (G_OBJECT (display), "session-type", session_type, NULL);
c90517
                 }
c90517
         }
c90517
 #endif
c90517
 
c90517
         if (display == NULL) {
c90517
                 guint32 num;
c90517
 
c90517
                 num = take_next_display_number (factory);
c90517
 
c90517
                 display = gdm_legacy_display_new (num);
c90517
         }
c90517
 
c90517
         g_object_set (display, "seat-id", seat_id, NULL);
c90517
         g_object_set (display, "is-initial", initial, NULL);
c90517
 
c90517
         store_display (factory, display);
c90517
 
c90517
         /* let store own the ref */
c90517
         g_object_unref (display);
c90517
 
c90517
         if (! gdm_display_manage (display)) {
c90517
-- 
c90517
2.26.0
c90517