File tree 1 file changed +15
-6
lines changed
1 file changed +15
-6
lines changed Original file line number Diff line number Diff line change @@ -102,22 +102,31 @@ impl<C: NetworkConnector<Stream=S>, S: NetworkStream + Send> NetworkConnector fo
102
102
type Stream = PooledStream < S > ;
103
103
fn connect ( & self , host : & str , port : u16 , scheme : & str ) -> :: Result < PooledStream < S > > {
104
104
let key = key ( host, port, scheme) ;
105
- let mut should_remove = false ;
106
- let inner = match self . inner . lock ( ) . unwrap ( ) . conns . get_mut ( & key) {
107
- Some ( ref mut vec) => {
105
+
106
+ let inner = {
107
+ // keep the mutex locked only in this block
108
+ let mut locked = self . inner . lock ( ) . unwrap ( ) ;
109
+ let mut should_remove = false ;
110
+ let inner = locked. conns . get_mut ( & key) . map ( |vec| {
108
111
trace ! ( "Pool had connection, using" ) ;
109
112
should_remove = vec. len ( ) == 1 ;
110
113
vec. pop ( ) . unwrap ( )
114
+ } ) ;
115
+ if should_remove {
116
+ locked. conns . remove ( & key) ;
111
117
}
118
+ inner
119
+ } ;
120
+
121
+ let inner = match inner {
122
+ Some ( inner) => inner,
112
123
None => PooledStreamInner {
113
124
key : key. clone ( ) ,
114
125
stream : try!( self . connector . connect ( host, port, scheme) ) ,
115
126
previous_response_expected_no_content : false ,
116
127
}
128
+
117
129
} ;
118
- if should_remove {
119
- self . inner . lock ( ) . unwrap ( ) . conns . remove ( & key) ;
120
- }
121
130
Ok ( PooledStream {
122
131
inner : Some ( inner) ,
123
132
is_closed : false ,
You can’t perform that action at this time.
0 commit comments