fix(h1): fix hung streaming bodies over HTTPS
This commit is contained in:
@@ -158,6 +158,9 @@ where
|
||||
debug!("flushed {} bytes", n);
|
||||
if self.write_buf.remaining() == 0 {
|
||||
break;
|
||||
} else if n == 0 {
|
||||
trace!("write returned zero, but {} bytes remaining", self.write_buf.remaining());
|
||||
return Err(io::ErrorKind::WriteZero.into())
|
||||
}
|
||||
}
|
||||
try_nb!(self.io.flush())
|
||||
@@ -391,8 +394,20 @@ impl<B: Buf> Buf for VecOrBuf<B> {
|
||||
#[inline]
|
||||
fn bytes_vec<'t>(&'t self, dst: &mut [&'t IoVec]) -> usize {
|
||||
match *self {
|
||||
VecOrBuf::Vec(ref v) => v.bytes_vec(dst),
|
||||
VecOrBuf::Buf(ref b) => b.bytes_vec(dst),
|
||||
VecOrBuf::Vec(ref v) => {
|
||||
if v.has_remaining() {
|
||||
v.bytes_vec(dst)
|
||||
} else {
|
||||
0
|
||||
}
|
||||
},
|
||||
VecOrBuf::Buf(ref b) => {
|
||||
if b.has_remaining() {
|
||||
b.bytes_vec(dst)
|
||||
} else {
|
||||
0
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -420,11 +435,12 @@ impl<T: Buf> Buf for BufDeque<T> {
|
||||
|
||||
#[inline]
|
||||
fn bytes(&self) -> &[u8] {
|
||||
if let Some(buf) = self.bufs.front() {
|
||||
buf.bytes()
|
||||
} else {
|
||||
&[]
|
||||
for buf in &self.bufs {
|
||||
if buf.has_remaining() {
|
||||
return buf.bytes();
|
||||
}
|
||||
}
|
||||
&[]
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
||||
Reference in New Issue
Block a user