From c7eb261abc32ac4d6fc5364244a6246bcdc462d9 Mon Sep 17 00:00:00 2001 From: sigoden Date: Thu, 9 Mar 2023 11:05:42 +0800 Subject: fix: abort by ctrlc unexpectedly prints error message (#49) --- src/repl/handler.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/repl') diff --git a/src/repl/handler.rs b/src/repl/handler.rs index 979fc5e..b5651c3 100644 --- a/src/repl/handler.rs +++ b/src/repl/handler.rs @@ -123,8 +123,10 @@ impl ReplyStreamHandler { pub fn text(&mut self, text: &str) -> Result<()> { match self.sender.as_ref() { Some(tx) => { - tx.send(ReplyStreamEvent::Text(text.to_string())) - .with_context(|| "Failed to send StreamEvent:Text")?; + let ret = tx + .send(ReplyStreamEvent::Text(text.to_string())) + .with_context(|| "Failed to send StreamEvent:Text"); + self.safe_ret(ret)?; } None => { print_now!("{}", text); @@ -137,8 +139,10 @@ impl ReplyStreamHandler { pub fn done(&mut self) -> Result<()> { match self.sender.as_ref() { Some(tx) => { - tx.send(ReplyStreamEvent::Done) - .with_context(|| "Failed to send StreamEvent:Done")?; + let ret = tx + .send(ReplyStreamEvent::Done) + .with_context(|| "Failed to send StreamEvent:Done"); + self.safe_ret(ret)?; } None => { if !self.buffer.ends_with('\n') { @@ -162,6 +166,13 @@ impl ReplyStreamHandler { pub fn get_abort(&self) -> SharedAbortSignal { self.abort.clone() } + + fn safe_ret(&self, ret: Result<()>) -> Result<()> { + if ret.is_err() && self.abort.aborted() { + return Ok(()); + } + ret + } } pub enum ReplyStreamEvent { -- cgit v1.2.3