From 7f5fe3848efe2e6b5a8c5a4fb952990759f3ca59 Mon Sep 17 00:00:00 2001 From: Ghadi Rahme Date: Wed, 28 Jun 2023 17:07:12 +0000 Subject: [PATCH] Clearing signal handler after udev settle or timeout to avoid sudden logout --- daemon/gdm-local-display-factory.c | 1 + 1 file changed, 1 insertion(+) diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c index 471e1b460..c10c1ef6c 100644 --- a/daemon/gdm-local-display-factory.c +++ b/daemon/gdm-local-display-factory.c @@ -628,60 +628,61 @@ lookup_prepared_display_by_seat_id (const char *id, status = gdm_display_get_status (display); if (status != GDM_DISPLAY_PREPARED) return FALSE; return lookup_by_seat_id (id, display, user_data); } #ifdef HAVE_UDEV static gboolean udev_is_settled (GdmLocalDisplayFactory *factory) { g_autoptr (GUdevEnumerator) enumerator = NULL; GList *devices; GList *node; gboolean is_settled = FALSE; if (factory->seat0_has_platform_graphics) { g_debug ("GdmLocalDisplayFactory: udev settled, platform graphics enabled."); return TRUE; } if (factory->seat0_has_boot_up_graphics) { g_debug ("GdmLocalDisplayFactory: udev settled, boot up graphics available."); return TRUE; } if (factory->seat0_graphics_check_timed_out) { g_debug ("GdmLocalDisplayFactory: udev timed out, proceeding anyway."); + g_clear_signal_handler (&factory->uevent_handler_id, factory->gudev_client); return TRUE; } g_debug ("GdmLocalDisplayFactory: Checking if udev has settled enough to support graphics."); enumerator = g_udev_enumerator_new (factory->gudev_client); g_udev_enumerator_add_match_name (enumerator, "card*"); g_udev_enumerator_add_match_tag (enumerator, "master-of-seat"); g_udev_enumerator_add_match_subsystem (enumerator, "drm"); devices = g_udev_enumerator_execute (enumerator); if (!devices) { g_debug ("GdmLocalDisplayFactory: udev has no candidate graphics devices available yet."); return FALSE; } node = devices; while (node != NULL) { GUdevDevice *device = node->data; GList *next_node = node->next; g_autoptr (GUdevDevice) platform_device = NULL; g_autoptr (GUdevDevice) pci_device = NULL; platform_device = g_udev_device_get_parent_with_subsystem (device, "platform", NULL); if (platform_device != NULL) { g_debug ("GdmLocalDisplayFactory: Found embedded platform graphics, proceeding."); factory->seat0_has_platform_graphics = TRUE; is_settled = TRUE; -- 2.41.0.rc2