From 5fcc04a6cd3dd2962eaefdf23133f88e9242e8b3 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Mon, 25 Apr 2016 15:36:55 -0700 Subject: [PATCH] perf(client): dont keep Pool mutex locked during getaddrinfo --- src/client/pool.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/client/pool.rs b/src/client/pool.rs index ac4ca03189..7a530302f3 100644 --- a/src/client/pool.rs +++ b/src/client/pool.rs @@ -102,22 +102,21 @@ impl, S: NetworkStream + Send> NetworkConnector fo type Stream = PooledStream; fn connect(&self, host: &str, port: u16, scheme: &str) -> ::Result> { let key = key(host, port, scheme); - let mut locked = self.inner.lock().unwrap(); let mut should_remove = false; - let inner = match locked.conns.get_mut(&key) { + let inner = match self.inner.lock().unwrap().conns.get_mut(&key) { Some(ref mut vec) => { trace!("Pool had connection, using"); should_remove = vec.len() == 1; vec.pop().unwrap() } - _ => PooledStreamInner { + None => PooledStreamInner { key: key.clone(), stream: try!(self.connector.connect(host, port, scheme)), previous_response_expected_no_content: false, } }; if should_remove { - locked.conns.remove(&key); + self.inner.lock().unwrap().conns.remove(&key); } Ok(PooledStream { inner: Some(inner),