@@ -11,7 +11,8 @@ use async_std::prelude::*;
11
11
use async_std:: { io, task} ;
12
12
13
13
use futures_util:: future:: Either ;
14
- use futures_util:: stream:: FuturesUnordered ;
14
+
15
+ use waitgroup:: { WaitGroup , Worker } ;
15
16
16
17
/// This represents a tide [Listener](crate::listener::Listener) that
17
18
/// wraps an [async_std::os::unix::net::UnixListener]. It is implemented as an
@@ -26,7 +27,6 @@ pub struct UnixListener<State> {
26
27
listener : Option < net:: UnixListener > ,
27
28
server : Option < Server < State > > ,
28
29
info : Option < ListenInfo > ,
29
- join_handles : Vec < task:: JoinHandle < ( ) > > ,
30
30
}
31
31
32
32
impl < State > UnixListener < State > {
@@ -36,7 +36,6 @@ impl<State> UnixListener<State> {
36
36
listener : None ,
37
37
server : None ,
38
38
info : None ,
39
- join_handles : Vec :: new ( ) ,
40
39
}
41
40
}
42
41
@@ -46,16 +45,18 @@ impl<State> UnixListener<State> {
46
45
listener : Some ( unix_listener. into ( ) ) ,
47
46
server : None ,
48
47
info : None ,
49
- join_handles : Vec :: new ( ) ,
50
48
}
51
49
}
52
50
}
53
51
54
52
fn handle_unix < State : Clone + Send + Sync + ' static > (
55
53
app : Server < State > ,
56
54
stream : UnixStream ,
57
- ) -> task:: JoinHandle < ( ) > {
55
+ wait_group_worker : Worker ,
56
+ ) {
58
57
task:: spawn ( async move {
58
+ let _wait_group_worker = wait_group_worker;
59
+
59
60
let local_addr = unix_socket_addr_to_string ( stream. local_addr ( ) ) ;
60
61
let peer_addr = unix_socket_addr_to_string ( stream. peer_addr ( ) ) ;
61
62
@@ -76,7 +77,7 @@ fn handle_unix<State: Clone + Send + Sync + 'static>(
76
77
if let Err ( error) = fut. await {
77
78
log:: error!( "async-h1 error" , { error: error. to_string( ) } ) ;
78
79
}
79
- } )
80
+ } ) ;
80
81
}
81
82
82
83
#[ async_trait:: async_trait]
@@ -119,6 +120,7 @@ where
119
120
} else {
120
121
Either :: Right ( incoming)
121
122
} ;
123
+ let wait_group = WaitGroup :: new ( ) ;
122
124
123
125
while let Some ( stream) = incoming. next ( ) . await {
124
126
match stream {
@@ -131,18 +133,12 @@ where
131
133
}
132
134
133
135
Ok ( stream) => {
134
- let handle = handle_unix ( server. clone ( ) , stream) ;
135
- self . join_handles . push ( handle) ;
136
+ handle_unix ( server. clone ( ) , stream, wait_group. worker ( ) ) ;
136
137
}
137
138
} ;
138
139
}
139
140
140
- let join_handles = std:: mem:: take ( & mut self . join_handles ) ;
141
- join_handles
142
- . into_iter ( )
143
- . collect :: < FuturesUnordered < task:: JoinHandle < ( ) > > > ( )
144
- . collect :: < ( ) > ( )
145
- . await ;
141
+ wait_group. wait ( ) . await ;
146
142
147
143
Ok ( ( ) )
148
144
}
0 commit comments