From cfcbd8c96ba40ca8974448dad0d6f285c35a9805 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Mon, 23 Jan 2017 23:56:35 -0800 Subject: [PATCH] fix(http): keep flushing until WOULDBLOCK is received --- src/http/io.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/http/io.rs b/src/http/io.rs index 92641a8a..95853ca6 100644 --- a/src/http/io.rs +++ b/src/http/io.rs @@ -129,14 +129,13 @@ impl Write for Buffered { if self.write_buf.remaining() == 0 { Ok(()) } 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); if self.write_buf.remaining() == 0 { - Ok(()) - } else { - Err(io::Error::new(io::ErrorKind::WouldBlock, "wouldblock")) + return Ok(()) } - }) + } } } } @@ -295,7 +294,6 @@ impl WriteBuf { trace!("WriteBuf reserving initial {}", init); vec.reserve(init); } 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)); trace!("WriteBuf reserved {}", vec.capacity() - cap); }