Skip to content

Commit 62ff1cc

Browse files
author
pe
committed
Change client Flush to pass through the "main" loop (atomic_poll)
Ignore-this: 1bf6ecc259ff81dbe38db7b2dedab8a0 darcs-hash:5e8d0f09a16e4c4d8b6e105fb0ff82f671785ade
1 parent 77347fd commit 62ff1cc

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

src/client/mod.rs

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -912,25 +912,32 @@ impl<H: Handler> Future for Flush<H> {
912912

913913
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
914914

915+
if let Some(ref mut c) = self.connection {
916+
c.state = Some(ConnectionState::Write)
917+
}
915918
loop {
916919
debug!("flush loop");
917-
let completely_written = if let Some(ref mut c) = self.connection {
918-
if let Some(ref mut s) = c.session {
919-
try!(s.flush());
920-
try_nb!(s.0.write_buffer.write_all(c.stream.get_mut()))
921-
} else {
922-
unreachable!()
920+
if let Some(mut c) = self.connection.take() {
921+
match try!(c.atomic_poll()) {
922+
Async::Ready(false) => return Ok(Async::Ready(c)),
923+
Async::NotReady => {
924+
self.connection = Some(c);
925+
return Ok(Async::NotReady)
926+
},
927+
Async::Ready(true) => {
928+
match c.state {
929+
Some(ConnectionState::Write) |
930+
Some(ConnectionState::Flush) => {
931+
self.connection = Some(c);
932+
},
933+
_ => {
934+
return Ok(Async::Ready(c))
935+
}
936+
}
937+
}
923938
}
924939
} else {
925940
unreachable!()
926-
};
927-
if completely_written {
928-
if let Some(mut c) = self.connection.take() {
929-
c.state = Some(ConnectionState::Write);
930-
return Ok(Async::Ready(c));
931-
} else {
932-
unreachable!()
933-
}
934941
}
935942
}
936943
}

0 commit comments

Comments
 (0)