diff options
author | Carl Lerche <me@carllerche.com> | 2020-09-24 17:26:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-24 17:26:03 -0700 |
commit | 4186b0aa38abbec7670d53882d5cdfd4b12add5c (patch) | |
tree | b067117fcb1a4c479cd274465bcac0431c2e59f7 /tokio/src/net | |
parent | 760ae89401d9addb71ebf19674980577b5501edd (diff) |
io: remove poll_{read,write}_buf from traits (#2882)
These functions have object safety issues. It also has been decided to
avoid vectored operations on the I/O traits. A later PR will bring back
vectored operations on specific types that support them.
Refs: #2879, #2716
Diffstat (limited to 'tokio/src/net')
-rw-r--r-- | tokio/src/net/tcp/split.rs | 9 | ||||
-rw-r--r-- | tokio/src/net/tcp/split_owned.rs | 9 | ||||
-rw-r--r-- | tokio/src/net/tcp/stream.rs | 48 |
3 files changed, 0 insertions, 66 deletions
diff --git a/tokio/src/net/tcp/split.rs b/tokio/src/net/tcp/split.rs index 9d99d7bd..6e927f05 100644 --- a/tokio/src/net/tcp/split.rs +++ b/tokio/src/net/tcp/split.rs @@ -12,7 +12,6 @@ use crate::future::poll_fn; use crate::io::{AsyncRead, AsyncWrite, ReadBuf}; use crate::net::TcpStream; -use bytes::Buf; use std::io; use std::net::Shutdown; use std::pin::Pin; @@ -148,14 +147,6 @@ impl AsyncWrite for WriteHalf<'_> { self.0.poll_write_priv(cx, buf) } - fn poll_write_buf<B: Buf>( - self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &mut B, - ) -> Poll<io::Result<usize>> { - self.0.poll_write_buf_priv(cx, buf) - } - #[inline] fn poll_flush(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<io::Result<()>> { // tcp flush is a no-op diff --git a/tokio/src/net/tcp/split_owned.rs b/tokio/src/net/tcp/split_owned.rs index 87be6efd..2f35f495 100644 --- a/tokio/src/net/tcp/split_owned.rs +++ b/tokio/src/net/tcp/split_owned.rs @@ -12,7 +12,6 @@ use crate::future::poll_fn; use crate::io::{AsyncRead, AsyncWrite, ReadBuf}; use crate::net::TcpStream; -use bytes::Buf; use std::error::Error; use std::net::Shutdown; use std::pin::Pin; @@ -230,14 +229,6 @@ impl AsyncWrite for OwnedWriteHalf { self.inner.poll_write_priv(cx, buf) } - fn poll_write_buf<B: Buf>( - self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &mut B, - ) -> Poll<io::Result<usize>> { - self.inner.poll_write_buf_priv(cx, buf) - } - #[inline] fn poll_flush(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<io::Result<()>> { // tcp flush is a no-op diff --git a/tokio/src/net/tcp/stream.rs b/tokio/src/net/tcp/stream.rs index 467d09fc..4bf17449 100644 --- a/tokio/src/net/tcp/stream.rs +++ b/tokio/src/net/tcp/stream.rs @@ -4,8 +4,6 @@ use crate::net::tcp::split::{split, ReadHalf, WriteHalf}; use crate::net::tcp::split_owned::{split_owned, OwnedReadHalf, OwnedWriteHalf}; use crate::net::ToSocketAddrs; -use bytes::Buf; -use iovec::IoVec; use std::convert::TryFrom; use std::fmt; use std::io::{self, Read, Write}; @@ -745,44 +743,6 @@ impl TcpStream { } } } - - pub(super) fn poll_write_buf_priv<B: Buf>( - &self, - cx: &mut Context<'_>, - buf: &mut B, - ) -> Poll<io::Result<usize>> { - use std::io::IoSlice; - - loop { - let ev = ready!(self.io.poll_write_ready(cx))?; - - // The `IoVec` (v0.1.x) type can't have a zero-length size, so create - // a dummy version from a 1-length slice which we'll overwrite with - // the `bytes_vectored` method. - static S: &[u8] = &[0]; - const MAX_BUFS: usize = 64; - - let mut slices: [IoSlice<'_>; MAX_BUFS] = [IoSlice::new(S); 64]; - let cnt = buf.bytes_vectored(&mut slices); - - let iovec = <&IoVec>::from(S); - let mut vecs = [iovec; MAX_BUFS]; - for i in 0..cnt { - vecs[i] = (*slices[i]).into(); - } - - match self.io.get_ref().write_bufs(&vecs[..cnt]) { - Ok(n) => { - buf.advance(n); - return Poll::Ready(Ok(n)); - } - Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => { - self.io.clear_readiness(ev); - } - Err(e) => return Poll::Ready(Err(e)), - } - } - } } impl TryFrom<TcpStream> for mio::net::TcpStream { @@ -827,14 +787,6 @@ impl AsyncWrite for TcpStream { self.poll_write_priv(cx, buf) } - fn poll_write_buf<B: Buf>( - self: Pin<&mut Self>, - cx: &mut Context<'_>, - buf: &mut B, - ) -> Poll<io::Result<usize>> { - self.poll_write_buf_priv(cx, buf) - } - #[inline] fn poll_flush(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<io::Result<()>> { // tcp flush is a no-op |