diff -Nru plymouth-0.9.3/debian/changelog plymouth-0.9.3/debian/changelog --- plymouth-0.9.3/debian/changelog 2018-09-11 23:03:58.000000000 +0000 +++ plymouth-0.9.3/debian/changelog 2019-04-04 15:41:18.000000000 +0000 @@ -1,3 +1,20 @@ +plymouth (0.9.3-1ubuntu7.18.04.2) bionic; urgency=medium + + [ Mauricio Faria de Oliveira ] + * d/p/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) + + [ Brian Murray ] + * debian/patches/git_helper_renderer.patch, + debian/patches/git_desactivate_renderer.patch: + - 'device-manager: free keyboards when deactivating a renderer', + (LP: #1794292) + + -- Dan Streetman Thu, 04 Apr 2019 11:41:18 -0400 + 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 1970-01-01 00:00:00.000000000 +0000 +++ plymouth-0.9.3/debian/patches/0013-device-manager-don-t-watch-for-udev-events-when-deac_bionic.patch 2019-04-04 15:34:08.000000000 +0000 @@ -0,0 +1,169 @@ +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. + +(backport by Mauricio Faria de Oliveira for context changes only) +Origin: backport,https://cgit.freedesktop.org/plymouth/commit/?id=85d843af843589ce8538a59e5cb665b8253e380d +Applied-Upstream: 0.9.4 +Bug-Ubuntu: https://launchpad.net/bugs/1817738 + +--- + 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(-) + +--- a/src/libply-splash-core/ply-device-manager.c ++++ b/src/libply-splash-core/ply-device-manager.c +@@ -63,6 +63,7 @@ + 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 @@ + 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 @@ + 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 + +@@ -792,6 +811,13 @@ + { + 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); +@@ -980,3 +1006,27 @@ + + 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 ++} +--- a/src/libply-splash-core/ply-device-manager.h ++++ b/src/libply-splash-core/ply-device-manager.h +@@ -54,6 +54,8 @@ + 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); +--- a/src/main.c ++++ b/src/main.c +@@ -1335,6 +1335,7 @@ + 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) { +@@ -1369,6 +1370,8 @@ + 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); diff -Nru plymouth-0.9.3/debian/patches/git_desactivate_renderer.patch plymouth-0.9.3/debian/patches/git_desactivate_renderer.patch --- plymouth-0.9.3/debian/patches/git_desactivate_renderer.patch 1970-01-01 00:00:00.000000000 +0000 +++ plymouth-0.9.3/debian/patches/git_desactivate_renderer.patch 2019-04-04 15:41:18.000000000 +0000 @@ -0,0 +1,64 @@ +From c46f446fe44457f599805b685547c2258bb3fa96 Mon Sep 17 00:00:00 2001 +From: Mathieu Trudel-Lapierre +Date: Tue, 4 Dec 2018 14:41:35 -0500 +Subject: [PATCH] device-manager: free keyboards when deactivating a renderer + +Based on an original patch by Gert van de Kraats, on Ubuntu Launchpad bug: +https://bugs.launchpad.net/ubuntu/+source/plymouth/+bug/1794292 + +Signed-off-by: Mathieu Trudel-Lapierre + +Origin: upstream,https://cgit.freedesktop.org/plymouth/commit/?id=c46f446fe44457f599805b685547c2258bb3fa96 +Bug-Ubuntu: https://launchpad.net/bugs/1794292 + +--- + src/libply-splash-core/ply-device-manager.c | 29 +++++++++++++++++++++ + 1 file changed, 29 insertions(+) + +Index: plymouth-0.9.3/src/libply-splash-core/ply-device-manager.c +=================================================================== +--- plymouth-0.9.3.orig/src/libply-splash-core/ply-device-manager.c ++++ plymouth-0.9.3/src/libply-splash-core/ply-device-manager.c +@@ -135,6 +135,34 @@ free_displays_for_renderer (ply_device_m + } + + static void ++free_keyboards_for_renderer (ply_device_manager_t *manager, ++ ply_renderer_t *renderer) ++{ ++ ply_list_node_t *node; ++ ++ node = ply_list_get_first_node (manager->keyboards); ++ while (node != NULL) { ++ ply_list_node_t *next_node; ++ ply_keyboard_t *keyboard; ++ ply_renderer_t *keyboard_renderer; ++ ++ keyboard = ply_list_node_get_data (node); ++ next_node = ply_list_get_next_node (manager->keyboards, node); ++ keyboard_renderer = ply_keyboard_get_renderer (keyboard); ++ ++ if (keyboard_renderer == renderer) { ++ ply_keyboard_free (keyboard); ++ ply_list_remove_node (manager->keyboards, node); ++ } ++ ++ node = next_node; ++ } ++ if (ply_list_get_first_node (manager->keyboards) == NULL) { ++ manager->local_console_managed = false; ++ } ++} ++ ++static void + free_devices_from_device_path (ply_device_manager_t *manager, + const char *device_path) + { +@@ -150,6 +178,7 @@ free_devices_from_device_path (ply_devic + return; + + free_displays_for_renderer (manager, renderer); ++ free_keyboards_for_renderer (manager, renderer); + + ply_hashtable_remove (manager->renderers, (void *) device_path); + free (key); diff -Nru plymouth-0.9.3/debian/patches/git_helper_renderer.patch plymouth-0.9.3/debian/patches/git_helper_renderer.patch --- plymouth-0.9.3/debian/patches/git_helper_renderer.patch 1970-01-01 00:00:00.000000000 +0000 +++ plymouth-0.9.3/debian/patches/git_helper_renderer.patch 2019-04-04 15:41:18.000000000 +0000 @@ -0,0 +1,57 @@ +From b082f42494e8423f08f40addc833d7e9b0192cb6 Mon Sep 17 00:00:00 2001 +From: Mathieu Trudel-Lapierre +Date: Tue, 4 Dec 2018 14:31:13 -0500 +Subject: [PATCH] keyboard: add helper to get the keyboard's renderer, if + applicable + +Based on an original patch from Gert van de Kraats on Ubuntu's Launchpad: +https://bugs.launchpad.net/ubuntu/+source/plymouth/+bug/1794292 + +Signed-off-by: Mathieu Trudel-Lapierre + +Origin: upstream,https://cgit.freedesktop.org/plymouth/commit/?id=b082f42494e8423f08f40addc833d7e9b0192cb6 +Bug-Ubuntu: https://launchpad.net/bugs/1794292 + +--- + src/libply-splash-core/ply-keyboard.c | 16 ++++++++++++++++ + src/libply-splash-core/ply-keyboard.h | 1 + + 2 files changed, 17 insertions(+) + +diff --git a/src/libply-splash-core/ply-keyboard.c b/src/libply-splash-core/ply-keyboard.c +index 80f7694..e11c093 100644 +--- a/src/libply-splash-core/ply-keyboard.c ++++ b/src/libply-splash-core/ply-keyboard.c +@@ -587,4 +587,20 @@ ply_keyboard_remove_enter_handler (ply_keyboard_t *keyboard, + } + } + ++ply_renderer_t * ++ply_keyboard_get_renderer (ply_keyboard_t *keyboard) ++{ ++ assert (keyboard != NULL); ++ ++ switch (keyboard->provider_type) { ++ case PLY_KEYBOARD_PROVIDER_TYPE_RENDERER: ++ return keyboard->provider.if_renderer->renderer; ++ ++ default: ++ break; ++ } ++ ++ return NULL; ++} ++ + /* vim: set ts=4 sw=4 et ai ci cino={.5s,^-2,+.5s,t0,g0,e-2,n-2,p2s,(0,=.5s,:.5s */ +diff --git a/src/libply-splash-core/ply-keyboard.h b/src/libply-splash-core/ply-keyboard.h +index 6147cc7..dd428c0 100644 +--- a/src/libply-splash-core/ply-keyboard.h ++++ b/src/libply-splash-core/ply-keyboard.h +@@ -72,6 +72,7 @@ void ply_keyboard_remove_enter_handler (ply_keyboard_t *keyboard, + bool ply_keyboard_watch_for_input (ply_keyboard_t *keyboard); + void ply_keyboard_stop_watching_for_input (ply_keyboard_t *keyboard); + bool ply_keyboard_is_active (ply_keyboard_t *keyboard); ++ply_renderer_t *ply_keyboard_get_renderer (ply_keyboard_t *keyboard); + + #endif + +-- 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 22:50:59.000000000 +0000 +++ plymouth-0.9.3/debian/patches/series 2019-04-04 15:41:18.000000000 +0000 @@ -16,6 +16,9 @@ 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 +git_helper_renderer.patch +git_desactivate_renderer.patch ## Ubuntu misc-changes.patch