The timer was left running after the screensaver was terminated. When it triggered, a fade out that would in turn cause the screen to be locked was started. Since that could happen without the compositor emitting the idle signal, there would be no wake signal to make the shell show the lock screen, so the system was left unresponsive until the idle signal actually triggered.
https://bugs.freedesktop.org/show_bug.cgi?id=70923 --- desktop-shell/shell.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 466ea93..09b992c 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -3715,6 +3715,12 @@ terminate_screensaver(struct desktop_shell *shell) if (shell->screensaver.process.pid == 0) return; + /* Disarm the screensaver timer, otherwise it may fire when the + * compositor is not in the idle state. In that case, the screen will + * be locked, but the wake_signal won't fire on user input, making the + * system unresponsive. */ + wl_event_source_timer_update(shell->screensaver.timer, 0); + kill(shell->screensaver.process.pid, SIGTERM); } -- 1.8.3.2 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
