|
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