|
1 | 1 | #![cfg(unix)] |
2 | 2 |
|
3 | | -use std::collections::HashMap; |
4 | 3 | use std::io::{Cursor, Read}; |
5 | 4 | use std::time::Duration; |
6 | 5 |
|
@@ -95,8 +94,7 @@ fn upload_lots() { |
95 | 94 | } |
96 | 95 |
|
97 | 96 | let mut m = Multi::new(); |
98 | | - let poll = t!(mio::Poll::new()); |
99 | | - let (tx, rx) = mio_extras::channel::channel(); |
| 97 | + let (tx, rx) = std::sync::mpsc::channel(); |
100 | 98 | let tx2 = tx.clone(); |
101 | 99 | t!(m.socket_function(move |socket, events, token| { |
102 | 100 | t!(tx2.send(Message::Wait(socket, events, token))); |
@@ -136,84 +134,44 @@ fn upload_lots() { |
136 | 134 | t!(h.upload(true)); |
137 | 135 | t!(h.http_headers(list)); |
138 | 136 |
|
139 | | - t!(poll.register(&rx, mio::Token(0), mio::Ready::all(), mio::PollOpt::level())); |
140 | | - |
141 | 137 | let e = t!(m.add(h)); |
142 | 138 |
|
143 | 139 | let mut next_token = 1; |
144 | | - let mut token_map = HashMap::new(); |
145 | 140 | let mut cur_timeout = None; |
146 | | - let mut events = mio::Events::with_capacity(128); |
147 | | - let mut running = true; |
148 | | - |
149 | | - while running { |
150 | | - let n = t!(poll.poll(&mut events, cur_timeout)); |
151 | 141 |
|
152 | | - if n == 0 && t!(m.timeout()) == 0 { |
153 | | - running = false; |
| 142 | + loop { |
| 143 | + match cur_timeout { |
| 144 | + Some(cur_timeout) => std::thread::sleep(cur_timeout), |
| 145 | + None => {} |
154 | 146 | } |
155 | 147 |
|
156 | | - for event in events.iter() { |
157 | | - while event.token() == mio::Token(0) { |
158 | | - match rx.try_recv() { |
159 | | - Ok(Message::Timeout(dur)) => cur_timeout = dur, |
160 | | - Ok(Message::Wait(socket, events, token)) => { |
161 | | - let evented = mio::unix::EventedFd(&socket); |
162 | | - if events.remove() { |
163 | | - token_map.remove(&token).unwrap(); |
164 | | - } else { |
165 | | - let mut e = mio::Ready::empty(); |
166 | | - if events.input() { |
167 | | - e |= mio::Ready::readable(); |
168 | | - } |
169 | | - if events.output() { |
170 | | - e |= mio::Ready::writable(); |
171 | | - } |
172 | | - if token == 0 { |
173 | | - let token = next_token; |
174 | | - next_token += 1; |
175 | | - t!(m.assign(socket, token)); |
176 | | - token_map.insert(token, socket); |
177 | | - t!(poll.register( |
178 | | - &evented, |
179 | | - mio::Token(token), |
180 | | - e, |
181 | | - mio::PollOpt::level() |
182 | | - )); |
183 | | - } else { |
184 | | - t!(poll.reregister( |
185 | | - &evented, |
186 | | - mio::Token(token), |
187 | | - e, |
188 | | - mio::PollOpt::level() |
189 | | - )); |
190 | | - } |
191 | | - } |
192 | | - } |
193 | | - Err(_) => break, |
| 148 | + t!(m.timeout()); |
| 149 | + |
| 150 | + let message = rx.try_recv(); |
| 151 | + |
| 152 | + match message { |
| 153 | + Ok(Message::Timeout(dur)) => cur_timeout = dur, |
| 154 | + Ok(Message::Wait(socket, events, token)) => { |
| 155 | + if token == 0 { |
| 156 | + let token = next_token; |
| 157 | + next_token += 1; |
| 158 | + t!(m.assign(socket, token)); |
194 | 159 | } |
195 | | - } |
196 | 160 |
|
197 | | - if event.token() == mio::Token(0) { |
198 | | - continue; |
199 | | - } |
| 161 | + let mut e = Events::new(); |
| 162 | + if events.input() { |
| 163 | + e.input(true); |
| 164 | + } |
| 165 | + if events.output() { |
| 166 | + e.output(true); |
| 167 | + } |
| 168 | + let remaining = t!(m.action(socket, &e)); |
200 | 169 |
|
201 | | - let token = event.token(); |
202 | | - let socket = token_map[&token.into()]; |
203 | | - let mut e = Events::new(); |
204 | | - if event.readiness().is_readable() { |
205 | | - e.input(true); |
206 | | - } |
207 | | - if event.readiness().is_writable() { |
208 | | - e.output(true); |
209 | | - } |
210 | | - if mio::unix::UnixReady::from(event.readiness()).is_error() { |
211 | | - e.error(true); |
212 | | - } |
213 | | - let remaining = t!(m.action(socket, &e)); |
214 | | - if remaining == 0 { |
215 | | - running = false; |
| 170 | + if remaining == 0 { |
| 171 | + break; |
| 172 | + } |
216 | 173 | } |
| 174 | + Err(_) => continue, |
217 | 175 | } |
218 | 176 | } |
219 | 177 |
|
|
0 commit comments