fix(http): keep flushing until WOULDBLOCK is received

This commit is contained in:
Sean McArthur
2017-01-23 23:56:35 -08:00
parent 529ad564c3
commit cfcbd8c96b

View File

@@ -129,14 +129,13 @@ impl<T: Write> Write for Buffered<T> {
if self.write_buf.remaining() == 0 { if self.write_buf.remaining() == 0 {
Ok(()) Ok(())
} else { } else {
self.write_buf.write_into(&mut self.io).and_then(|n| { loop {
let n = try!(self.write_buf.write_into(&mut self.io));
debug!("flushed {} bytes", n); debug!("flushed {} bytes", n);
if self.write_buf.remaining() == 0 { if self.write_buf.remaining() == 0 {
Ok(()) return Ok(())
} else {
Err(io::Error::new(io::ErrorKind::WouldBlock, "wouldblock"))
} }
}) }
} }
} }
} }
@@ -295,7 +294,6 @@ impl WriteBuf {
trace!("WriteBuf reserving initial {}", init); trace!("WriteBuf reserving initial {}", init);
vec.reserve(init); vec.reserve(init);
} else if cap < MAX_BUFFER_SIZE { } else if cap < MAX_BUFFER_SIZE {
trace!("maybe_reserve MAX={}, needed={}, cap={}", MAX_BUFFER_SIZE, needed, cap);
vec.reserve(cmp::min(needed, MAX_BUFFER_SIZE - cap)); vec.reserve(cmp::min(needed, MAX_BUFFER_SIZE - cap));
trace!("WriteBuf reserved {}", vec.capacity() - cap); trace!("WriteBuf reserved {}", vec.capacity() - cap);
} }