perf(client): dont keep Pool mutex locked during getaddrinfo
This commit is contained in:
		| @@ -102,22 +102,21 @@ impl<C: NetworkConnector<Stream=S>, S: NetworkStream + Send> NetworkConnector fo | |||||||
|     type Stream = PooledStream<S>; |     type Stream = PooledStream<S>; | ||||||
|     fn connect(&self, host: &str, port: u16, scheme: &str) -> ::Result<PooledStream<S>> { |     fn connect(&self, host: &str, port: u16, scheme: &str) -> ::Result<PooledStream<S>> { | ||||||
|         let key = key(host, port, scheme); |         let key = key(host, port, scheme); | ||||||
|         let mut locked = self.inner.lock().unwrap(); |  | ||||||
|         let mut should_remove = false; |         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) => { |             Some(ref mut vec) => { | ||||||
|                 trace!("Pool had connection, using"); |                 trace!("Pool had connection, using"); | ||||||
|                 should_remove = vec.len() == 1; |                 should_remove = vec.len() == 1; | ||||||
|                 vec.pop().unwrap() |                 vec.pop().unwrap() | ||||||
|             } |             } | ||||||
|             _ => PooledStreamInner { |             None => PooledStreamInner { | ||||||
|                 key: key.clone(), |                 key: key.clone(), | ||||||
|                 stream: try!(self.connector.connect(host, port, scheme)), |                 stream: try!(self.connector.connect(host, port, scheme)), | ||||||
|                 previous_response_expected_no_content: false, |                 previous_response_expected_no_content: false, | ||||||
|             } |             } | ||||||
|         }; |         }; | ||||||
|         if should_remove { |         if should_remove { | ||||||
|             locked.conns.remove(&key); |             self.inner.lock().unwrap().conns.remove(&key); | ||||||
|         } |         } | ||||||
|         Ok(PooledStream { |         Ok(PooledStream { | ||||||
|             inner: Some(inner), |             inner: Some(inner), | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user