From 5b6004e0e3389a649feb726a3c9a7e8c909ab8c0 Mon Sep 17 00:00:00 2001 From: Alexander Brevig Date: Sun, 5 Mar 2023 02:52:20 +0100 Subject: [PATCH] fix: Handle signals before crossterm events (#6170) This is a workaround for a freeze when suspending Helix with C-z on non-Windows systems. The check for the keyboard enhancement protocol locks up crossterm's internal event reading/polling system by trying to set up multiple concurrent readers. `input_stream.next()` sets up one reader looking for regular crossterm events while the `supports_keyboard_enhancement` query sets up another looking for internal events. The latter hangs for two seconds or until the former yields an event. By handling signals first we don't lock up the mutex by trying to read keyboard events. --- helix-term/src/application.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index ee2a438c0f1ce..df6d9da6cd328 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -345,12 +345,12 @@ impl Application { tokio::select! { biased; - Some(event) = input_stream.next() => { - self.handle_terminal_events(event).await; - } Some(signal) = self.signals.next() => { self.handle_signals(signal).await; } + Some(event) = input_stream.next() => { + self.handle_terminal_events(event).await; + } Some(callback) = self.jobs.futures.next() => { self.jobs.handle_callback(&mut self.editor, &mut self.compositor, callback); self.render().await;