mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-05-12 02:47:15 +00:00
rw-stream-sink: Skip over empty stream items. (#677)
Otherwise it may report the reading of 0 bytes which is interpreted as EOF by consumers of `std::io::Read::read`.
This commit is contained in:
parent
1da97242da
commit
aa86f6824d
@ -80,23 +80,33 @@ where
|
||||
};
|
||||
|
||||
if need_new_item {
|
||||
self.current_item = match self.inner.poll() {
|
||||
Ok(Async::Ready(i)) => i.map(|b| b.into_buf()),
|
||||
Ok(Async::NotReady) => {
|
||||
if written == 0 {
|
||||
return Err(IoError::new(IoErrorKind::WouldBlock, "stream not ready"));
|
||||
} else {
|
||||
return Ok(written);
|
||||
loop {
|
||||
self.current_item = match self.inner.poll() {
|
||||
Ok(Async::Ready(None)) => None,
|
||||
Ok(Async::Ready(Some(i))) => {
|
||||
let b = i.into_buf();
|
||||
if !b.has_remaining() {
|
||||
continue // skip over empty items
|
||||
}
|
||||
Some(b)
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
if written == 0 {
|
||||
return Err(err);
|
||||
} else {
|
||||
return Ok(written);
|
||||
Ok(Async::NotReady) => {
|
||||
if written == 0 {
|
||||
return Err(IoError::new(IoErrorKind::WouldBlock, "stream not ready"));
|
||||
} else {
|
||||
return Ok(written);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
Err(err) => {
|
||||
if written == 0 {
|
||||
return Err(err);
|
||||
} else {
|
||||
return Ok(written);
|
||||
}
|
||||
}
|
||||
};
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
let current_item = match self.current_item {
|
||||
|
Loading…
x
Reference in New Issue
Block a user