[PATCH weston] shell: Disarm the screensaver timeout timer on terminate_screensaver()

Ander Conselvan de Oliveira ander.conselvan.de.oliveira at intel.com
Thu Apr 10 04:49:35 PDT 2014


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



More information about the wayland-devel mailing list