From 5a1dd3ccbe23c4325b54f1b2eb8be24233499416 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Tue, 14 May 2019 11:24:54 +0200 Subject: [PATCH] fix(imap): only interrupt existing idle connection --- src/dc_imap.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/dc_imap.rs b/src/dc_imap.rs index ca614b53d..8f82735b2 100644 --- a/src/dc_imap.rs +++ b/src/dc_imap.rs @@ -1027,15 +1027,19 @@ impl Imap { } pub fn interrupt_idle(&self) { - if let Some(ref mut stream) = self.session.lock().unwrap().1 { - match stream.shutdown(net::Shutdown::Both) { - Ok(_) => {} - Err(err) => { - eprintln!("failed to disconnect: {}", err); + // only kill the connection, if we are actually ideling + if self.session.lock().unwrap().0.is_none() { + if let Some(ref mut stream) = self.session.lock().unwrap().1 { + match stream.shutdown(net::Shutdown::Both) { + Ok(_) => {} + Err(err) => { + eprintln!("failed to disconnect: {}", err); + } } } } + // interrupt fake idle let &(ref lock, ref cvar) = &*self.watch.clone(); let mut watch = lock.lock().unwrap();