From 27c78eb4efc598281eed9cd521ba1b05ee08e3d2 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 22 Jul 2024 14:59:43 -0400 Subject: [PATCH 2/3] manager: Quit plymouth at first sign of failure Rather than quit plymouth after a replacement X server is already started, this commit does it a bit earlier, so there is a battle of display servers. --- common/gdm-address.c | 4 ++-- daemon/gdm-manager.c | 5 +++++ daemon/gdm-xdmcp-display-factory.c | 10 ++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/common/gdm-address.c b/common/gdm-address.c index a8b73e2..3a507d0 100644 --- a/common/gdm-address.c +++ b/common/gdm-address.c @@ -134,7 +134,7 @@ gdm_address_get_sockaddr_storage (GdmAddress *address) g_return_val_if_fail (address != NULL, NULL); g_return_val_if_fail (address->ss != NULL, NULL); - ss = g_memdup (address->ss, sizeof (struct sockaddr_storage)); + ss = g_memdup2 (address->ss, sizeof (struct sockaddr_storage)); return ss; } @@ -529,7 +529,7 @@ gdm_address_copy (GdmAddress *address) g_return_val_if_fail (address != NULL, NULL); addr = g_new0 (GdmAddress, 1); - addr->ss = g_memdup (address->ss, sizeof (struct sockaddr_storage)); + addr->ss = g_memdup2 (address->ss, sizeof (struct sockaddr_storage)); return addr; } diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c index 7a68d52..23734e8 100644 --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c @@ -1545,6 +1545,8 @@ on_display_status_changed (GdmDisplay *display, g_free (session_class); } break; + + case GDM_DISPLAY_FAILING: case GDM_DISPLAY_FAILED: case GDM_DISPLAY_UNMANAGED: case GDM_DISPLAY_FINISHED: @@ -1555,6 +1557,9 @@ on_display_status_changed (GdmDisplay *display, } #endif + if (status == GDM_DISPLAY_FAILING) + break; + g_object_set_data (G_OBJECT (display), "gdm-user-session", NULL); if (display == manager->priv->automatic_login_display) { diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c index abb58fa..e82cfe1 100644 --- a/daemon/gdm-xdmcp-display-factory.c +++ b/daemon/gdm-xdmcp-display-factory.c @@ -918,10 +918,10 @@ set_port_for_request (GdmAddress *address, switch (ss->ss_family) { case AF_INET: - port->data = (CARD8 *)g_memdup (&(SIN (ss)->sin_port), port->length); + port->data = (CARD8 *)g_memdup2 (&(SIN (ss)->sin_port), port->length); break; case AF_INET6: - port->data = (CARD8 *)g_memdup (&(SIN6 (ss)->sin6_port), port->length); + port->data = (CARD8 *)g_memdup2 (&(SIN6 (ss)->sin6_port), port->length); break; default: port->data = NULL; @@ -940,11 +940,11 @@ set_address_for_request (GdmAddress *address, switch (ss->ss_family) { case AF_INET: addr->length = sizeof (struct in_addr); - addr->data = g_memdup (&SIN (ss)->sin_addr, addr->length); + addr->data = g_memdup2 (&SIN (ss)->sin_addr, addr->length); break; case AF_INET6: addr->length = sizeof (struct in6_addr); - addr->data = g_memdup (&SIN6 (ss)->sin6_addr, addr->length); + addr->data = g_memdup2 (&SIN6 (ss)->sin6_addr, addr->length); break; default: addr->length = 0; @@ -2090,6 +2090,8 @@ on_display_status_changed (GdmDisplay *display, gdm_display_factory_queue_purge_displays (GDM_DISPLAY_FACTORY (factory)); break; + case GDM_DISPLAY_FAILING: + break; case GDM_DISPLAY_FAILED: gdm_display_factory_queue_purge_displays (GDM_DISPLAY_FACTORY (factory)); break; -- 2.44.0