mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-09-06 00:00:10 +02:00
io: handle empty vectored writes in simplex (#8353)
This commit is contained in:
@@ -291,6 +291,10 @@ impl AsyncWrite for Sender {
|
|||||||
return Poll::Ready(Err(IoError::new(IoErrorKind::BrokenPipe, CLOSED_ERROR_MSG)));
|
return Poll::Ready(Err(IoError::new(IoErrorKind::BrokenPipe, CLOSED_ERROR_MSG)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if bufs.iter().all(|buf| buf.is_empty()) {
|
||||||
|
return Poll::Ready(Ok(0));
|
||||||
|
}
|
||||||
|
|
||||||
let free = inner
|
let free = inner
|
||||||
.backpressure_boundary
|
.backpressure_boundary
|
||||||
.checked_sub(inner.buf.len())
|
.checked_sub(inner.buf.len())
|
||||||
|
|||||||
@@ -354,3 +354,16 @@ async fn poll_write_vectored_3() {
|
|||||||
let n = assert_ready!(tx.poll_write_vectored(&mut noop_context(), io_slices)).unwrap();
|
let n = assert_ready!(tx.poll_write_vectored(&mut noop_context(), io_slices)).unwrap();
|
||||||
assert_eq!(n, 0);
|
assert_eq!(n, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The `Sender::poll_write_vectored` should return `Poll::Ready(Ok(0))`
|
||||||
|
/// if all the input buffers have zero length, even when the channel is full.
|
||||||
|
#[tokio::test]
|
||||||
|
async fn poll_write_vectored_4() {
|
||||||
|
let (mut tx, _rx) = simplex::new(1);
|
||||||
|
tx.write_all(&[1]).await.unwrap();
|
||||||
|
|
||||||
|
let io_slices = &[IoSlice::new(&[]), IoSlice::new(&[])];
|
||||||
|
tokio::pin!(tx);
|
||||||
|
let n = assert_ready!(tx.poll_write_vectored(&mut noop_context(), io_slices)).unwrap();
|
||||||
|
assert_eq!(n, 0);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user