From 3dafec076b7a69aaa80a66f9de9930da78d23c00 Mon Sep 17 00:00:00 2001 From: Christian Duerr Date: Thu, 18 Feb 2021 20:27:52 +0000 Subject: Fix search freezing Alacritty This resolves a regression introduced in 530de00 where searching would cause a deadlock when the viewport is at the bottom of the scrollback and a match ends in the last cell. Fixes #4800. --- alacritty_terminal/src/term/search.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/alacritty_terminal/src/term/search.rs b/alacritty_terminal/src/term/search.rs index ee0cfdcb..d4fd61eb 100644 --- a/alacritty_terminal/src/term/search.rs +++ b/alacritty_terminal/src/term/search.rs @@ -469,16 +469,25 @@ impl<'a, T> Iterator for RegexIter<'a, T> { type Item = Match; fn next(&mut self) -> Option { + if self.done { + return None; + } + + // Since the end itself might be a single cell match, we search one more time. if self.point == self.end { self.done = true; - } else if self.done { - return None; } let regex_match = self.next_match()?; self.point = *regex_match.end(); - self.skip(); + if self.point == self.end { + // Stop when the match terminates right on the end limit. + self.done = true; + } else { + // Move the new search origin past the match. + self.skip(); + } Some(regex_match) } -- cgit