diff -Nru plymouth-0.9.3/debian/changelog plymouth-0.9.3/debian/changelog --- plymouth-0.9.3/debian/changelog 2018-09-11 19:03:58.000000000 -0400 +++ plymouth-0.9.3/debian/changelog 2019-04-02 17:35:36.000000000 -0400 @@ -1,3 +1,13 @@ +plymouth (0.9.3-1ubuntu7.18.04.2) bionic; urgency=medium + + * 0013-device-manager-don-t-watch-for-udev-events-when-deac_bionic.patch: + Don't process udev events after we've been deactivated (e.g., by gdm). + These can cause the VT/tty to be set back to VT_AUTO mode after it's + set to VT_PROCESS mode (by gdm), which blocks 'chvt' indefinitely on + that VT (login screen or auto-login session in tty1). (LP: #1817738) + + -- Mauricio Faria de Oliveira Tue, 02 Apr 2019 18:35:36 -0300 + plymouth (0.9.3-1ubuntu7.18.04.1) bionic; urgency=medium * debian/patches/git_ensure_tty_closed_0a662723.patch: ensure tty is closed diff -Nru plymouth-0.9.3/debian/patches/0013-device-manager-don-t-watch-for-udev-events-when-deac_bionic.patch plymouth-0.9.3/debian/patches/0013-device-manager-don-t-watch-for-udev-events-when-deac_bionic.patch --- plymouth-0.9.3/debian/patches/0013-device-manager-don-t-watch-for-udev-events-when-deac_bionic.patch 1969-12-31 19:00:00.000000000 -0500 +++ plymouth-0.9.3/debian/patches/0013-device-manager-don-t-watch-for-udev-events-when-deac_bionic.patch 2019-04-02 17:31:13.000000000 -0400 @@ -0,0 +1,176 @@ +From 85d843af843589ce8538a59e5cb665b8253e380d Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Wed, 10 Oct 2018 20:07:37 +0100 +Subject: [PATCH] device-manager: don't watch for udev events when deactivated + +If a device gets added when we're already deactivated, plymouth shouldn't +process the device, since processing it effectively activates plymouth. + +This commit pulls the udev monitor fd out of the event loop while +plymouth is deactivated so new events are deferred until reactivation. + +Modified by Iain Lane : Also deactivate the +timer that finds all devices known to udev after an interval, when +paused. + +Origin: backport,commit:85d843af843589ce8538a59e5cb665b8253e380d +Applied-Upstream: 0.9.4 + +--- + src/libply-splash-core/ply-device-manager.c | 74 +++++++++++++++++---- + src/libply-splash-core/ply-device-manager.h | 2 + + src/main.c | 3 + + 3 files changed, 67 insertions(+), 12 deletions(-) + +diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c +index 18612ac..55248ac 100644 +--- a/src/libply-splash-core/ply-device-manager.c ++++ b/src/libply-splash-core/ply-device-manager.c +@@ -63,6 +63,7 @@ struct _ply_device_manager + ply_list_t *pixel_displays; + struct udev *udev_context; + struct udev_monitor *udev_monitor; ++ ply_fd_watch_t *fd_watch; + + ply_keyboard_added_handler_t keyboard_added_handler; + ply_keyboard_removed_handler_t keyboard_removed_handler; +@@ -77,6 +78,9 @@ struct _ply_device_manager + uint32_t serial_consoles_detected : 1; + uint32_t renderers_activated : 1; + uint32_t keyboards_activated : 1; ++ ++ uint32_t paused : 1; ++ uint32_t device_timeout_elapsed : 1; + }; + + static void +@@ -375,23 +379,38 @@ watch_for_udev_events (ply_device_manager_t *manager) + assert (manager != NULL); + assert (manager->udev_monitor == NULL); + ++ if (manager->fd_watch != NULL) ++ return; ++ + ply_trace ("watching for udev graphics device add and remove events"); + +- manager->udev_monitor = udev_monitor_new_from_netlink (manager->udev_context, "udev"); ++ if (manager->udev_monitor == NULL) { ++ manager->udev_monitor = udev_monitor_new_from_netlink (manager->udev_context, "udev"); + +- udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_DRM, NULL); +- udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_FRAME_BUFFER, NULL); +- udev_monitor_filter_add_match_tag (manager->udev_monitor, "seat"); +- udev_monitor_enable_receiving (manager->udev_monitor); ++ udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_DRM, NULL); ++ udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_FRAME_BUFFER, NULL); ++ udev_monitor_filter_add_match_tag (manager->udev_monitor, "seat"); ++ udev_monitor_enable_receiving (manager->udev_monitor); ++ } + + fd = udev_monitor_get_fd (manager->udev_monitor); +- ply_event_loop_watch_fd (manager->loop, +- fd, +- PLY_EVENT_LOOP_FD_STATUS_HAS_DATA, +- (ply_event_handler_t) +- on_udev_event, +- NULL, +- manager); ++ manager->fd_watch = ply_event_loop_watch_fd (manager->loop, ++ fd, ++ PLY_EVENT_LOOP_FD_STATUS_HAS_DATA, ++ (ply_event_handler_t) ++ on_udev_event, ++ NULL, ++ manager); ++} ++ ++static void ++stop_watching_for_udev_events (ply_device_manager_t *manager) ++{ ++ if (manager->fd_watch == NULL) ++ return; ++ ++ ply_event_loop_stop_watching_fd (manager->loop, manager->fd_watch); ++ manager->fd_watch = NULL; + } + #endif + +@@ -801,6 +820,13 @@ create_devices_from_udev (ply_device_manager_t *manager) + { + bool found_drm_device, found_fb_device; + ++ manager->device_timeout_elapsed = true; ++ ++ if (manager->paused) { ++ ply_trace ("create_devices_from_udev timeout elapsed while paused, deferring execution"); ++ return; ++ } ++ + ply_trace ("Timeout elapsed, looking for devices from udev"); + + found_drm_device = create_devices_for_subsystem (manager, SUBSYSTEM_DRM); +@@ -992,3 +1018,27 @@ ply_device_manager_deactivate_keyboards (ply_device_manager_t *manager) + + manager->keyboards_activated = false; + } ++ ++void ++ply_device_manager_pause (ply_device_manager_t *manager) ++{ ++ ply_trace ("ply_device_manager_pause() called, stopping watching for udev events"); ++ manager->paused = true; ++#ifdef HAVE_UDEV ++ stop_watching_for_udev_events (manager); ++#endif ++} ++ ++void ++ply_device_manager_unpause (ply_device_manager_t *manager) ++{ ++ ply_trace ("ply_device_manager_unpause() called, resuming watching for udev events"); ++ manager->paused = false; ++#ifdef HAVE_UDEV ++ if (manager->device_timeout_elapsed) { ++ ply_trace ("ply_device_manager_unpause(): timeout elapsed while paused, looking for udev devices"); ++ create_devices_from_udev (manager); ++ } ++ watch_for_udev_events (manager); ++#endif ++} +diff --git a/src/libply-splash-core/ply-device-manager.h b/src/libply-splash-core/ply-device-manager.h +index ad05897..389b636 100644 +--- a/src/libply-splash-core/ply-device-manager.h ++++ b/src/libply-splash-core/ply-device-manager.h +@@ -55,6 +55,8 @@ void ply_device_manager_watch_devices (ply_device_manager_t *mana + ply_text_display_added_handler_t text_display_added_handler, + ply_text_display_removed_handler_t text_display_removed_handler, + void *data); ++void ply_device_manager_pause (ply_device_manager_t *manager); ++void ply_device_manager_unpause (ply_device_manager_t *manager); + bool ply_device_manager_has_serial_consoles (ply_device_manager_t *manager); + bool ply_device_manager_has_displays (ply_device_manager_t *manager); + ply_list_t *ply_device_manager_get_keyboards (ply_device_manager_t *manager); +diff --git a/src/main.c b/src/main.c +index 0564e15..47157bc 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -1347,6 +1347,7 @@ on_deactivate (state_t *state, + ply_trace ("deactivating"); + cancel_pending_delayed_show (state); + ++ ply_device_manager_pause (state->device_manager); + ply_device_manager_deactivate_keyboards (state->device_manager); + + if (state->boot_splash != NULL) { +@@ -1382,6 +1383,8 @@ on_reactivate (state_t *state) + ply_device_manager_activate_keyboards (state->device_manager); + ply_device_manager_activate_renderers (state->device_manager); + ++ ply_device_manager_unpause (state->device_manager); ++ + state->is_inactive = false; + + update_display (state); +-- +2.17.0 + diff -Nru plymouth-0.9.3/debian/patches/series plymouth-0.9.3/debian/patches/series --- plymouth-0.9.3/debian/patches/series 2018-09-11 18:50:59.000000000 -0400 +++ plymouth-0.9.3/debian/patches/series 2019-04-02 17:32:38.000000000 -0400 @@ -16,6 +16,7 @@ 0006-x11-don-t-call-gdk_display_get_name-before-gtk_init.patch 0007-device-manager-drop-superfluous-create_pixel_display.patch git_ensure_tty_closed_0a662723.patch +0013-device-manager-don-t-watch-for-udev-events-when-deac_bionic.patch ## Ubuntu misc-changes.patch