From a91a3f2dce121a179a9371cd0ad1e548cf3d7731 Mon Sep 17 00:00:00 2001 From: Joe Wilm Date: Thu, 29 Dec 2016 21:38:22 -0500 Subject: Fix pty read sometimes not triggering draw There was a lot of complexity around the threadsafe `Flag` type and waking up the event loop. The idea was to prevent unnecessary calls to the glutin window's wakeup_event_loop() method which can be expensive. This complexity made it difficult to get synchronization between the pty reader and the render thread correct. Now, the `dirty` flag on the terminal is also used to prevent spurious wakeups. It is only changed when the mutex is held, so race conditions associated with that flag shouldn't happen. --- src/term/mod.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/term') diff --git a/src/term/mod.rs b/src/term/mod.rs index 29bf6b83..4e4a022c 100644 --- a/src/term/mod.rs +++ b/src/term/mod.rs @@ -298,7 +298,7 @@ impl Term { let scroll_region = Line(0)..grid.num_lines(); Term { - dirty: true, + dirty: false, grid: grid, alt_grid: alt, alt: false, @@ -313,6 +313,11 @@ impl Term { } } + #[inline] + pub fn needs_draw(&self) -> bool { + self.dirty + } + pub fn string_from_selection(&self, span: &Span) -> String { /// Need a generic push() for the Append trait trait PushChar { -- cgit