mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-05-15 12:21:20 +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 {
|
if need_new_item {
|
||||||
self.current_item = match self.inner.poll() {
|
loop {
|
||||||
Ok(Async::Ready(i)) => i.map(|b| b.into_buf()),
|
self.current_item = match self.inner.poll() {
|
||||||
Ok(Async::NotReady) => {
|
Ok(Async::Ready(None)) => None,
|
||||||
if written == 0 {
|
Ok(Async::Ready(Some(i))) => {
|
||||||
return Err(IoError::new(IoErrorKind::WouldBlock, "stream not ready"));
|
let b = i.into_buf();
|
||||||
} else {
|
if !b.has_remaining() {
|
||||||
return Ok(written);
|
continue // skip over empty items
|
||||||
|
}
|
||||||
|
Some(b)
|
||||||
}
|
}
|
||||||
}
|
Ok(Async::NotReady) => {
|
||||||
Err(err) => {
|
if written == 0 {
|
||||||
if written == 0 {
|
return Err(IoError::new(IoErrorKind::WouldBlock, "stream not ready"));
|
||||||
return Err(err);
|
} else {
|
||||||
} else {
|
return Ok(written);
|
||||||
return Ok(written);
|
}
|
||||||
}
|
}
|
||||||
}
|
Err(err) => {
|
||||||
};
|
if written == 0 {
|
||||||
|
return Err(err);
|
||||||
|
} else {
|
||||||
|
return Ok(written);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let current_item = match self.current_item {
|
let current_item = match self.current_item {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user