summaryrefslogtreecommitdiffstats
path: root/tokio
diff options
context:
space:
mode:
authorCarl Lerche <me@carllerche.com>2019-11-20 14:27:49 -0800
committerGitHub <noreply@github.com>2019-11-20 14:27:49 -0800
commit5cd665afd7b70b184b559e6407fdf645983e1314 (patch)
tree2197d4502d01218ca6df8c076f55d83027a18230 /tokio
parent3e643c7b81736a4c2b11387a6f71aba99450270b (diff)
chore: update `bytes` dependency to git master (#1796)
Tokio will track changes to bytes until 0.5 is released.
Diffstat (limited to 'tokio')
-rw-r--r--tokio/Cargo.toml3
-rw-r--r--tokio/src/io/async_read.rs16
-rw-r--r--tokio/src/io/util/buf_reader.rs10
-rw-r--r--tokio/src/io/util/buf_stream.rs11
-rw-r--r--tokio/src/io/util/buf_writer.rs3
-rw-r--r--tokio/src/io/util/read_to_end.rs6
-rw-r--r--tokio/src/io/util/take.rs3
-rw-r--r--tokio/src/net/tcp/split.rs20
-rw-r--r--tokio/src/net/tcp/stream.rs115
-rw-r--r--tokio/src/net/unix/split.rs20
-rw-r--r--tokio/src/net/unix/stream.rs115
-rw-r--r--tokio/tests/io_async_read.rs12
12 files changed, 47 insertions, 287 deletions
diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml
index 9364ea82..0619a50f 100644
--- a/tokio/Cargo.toml
+++ b/tokio/Cargo.toml
@@ -91,8 +91,7 @@ uds = ["io-driver", "mio-uds", "libc"]
[dependencies]
tokio-macros = { version = "=0.2.0-alpha.6", optional = true, path = "../tokio-macros" }
-bytes = "0.4"
-iovec = "0.1"
+bytes = { git = "https://github.com/tokio-rs/bytes" }
pin-project-lite = "0.1.1"
# Everything else is optional...
diff --git a/tokio/src/io/async_read.rs b/tokio/src/io/async_read.rs
index 974cf346..d7e703d4 100644
--- a/tokio/src/io/async_read.rs
+++ b/tokio/src/io/async_read.rs
@@ -1,5 +1,6 @@
use bytes::BufMut;
use std::io;
+use std::mem::MaybeUninit;
use std::ops::DerefMut;
use std::pin::Pin;
use std::task::{Context, Poll};
@@ -63,9 +64,9 @@ pub trait AsyncRead {
///
/// [`io::Read`]: std::io::Read
/// [`poll_read_buf`]: #method.poll_read_buf
- unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [MaybeUninit<u8>]) -> bool {
for x in buf {
- *x = 0;
+ *x.as_mut_ptr() = 0;
}
true
@@ -109,6 +110,9 @@ pub trait AsyncRead {
self.prepare_uninitialized_buffer(b);
+ // Convert to `&mut [u8]`
+ let b = &mut *(b as *mut [MaybeUninit<u8>] as *mut [u8]);
+
ready!(self.poll_read(cx, b))?
};
@@ -120,7 +124,7 @@ pub trait AsyncRead {
macro_rules! deref_async_read {
() => {
- unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [MaybeUninit<u8>]) -> bool {
(**self).prepare_uninitialized_buffer(buf)
}
@@ -145,7 +149,7 @@ where
P: DerefMut + Unpin,
P::Target: AsyncRead,
{
- unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [MaybeUninit<u8>]) -> bool {
(**self).prepare_uninitialized_buffer(buf)
}
@@ -159,7 +163,7 @@ where
}
impl AsyncRead for &[u8] {
- unsafe fn prepare_uninitialized_buffer(&self, _buf: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, _buf: &mut [MaybeUninit<u8>]) -> bool {
false
}
@@ -173,7 +177,7 @@ impl AsyncRead for &[u8] {
}
impl<T: AsRef<[u8]> + Unpin> AsyncRead for io::Cursor<T> {
- unsafe fn prepare_uninitialized_buffer(&self, _buf: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, _buf: &mut [MaybeUninit<u8>]) -> bool {
false
}
diff --git a/tokio/src/io/util/buf_reader.rs b/tokio/src/io/util/buf_reader.rs
index 46caa1fa..5cf2c179 100644
--- a/tokio/src/io/util/buf_reader.rs
+++ b/tokio/src/io/util/buf_reader.rs
@@ -3,6 +3,7 @@ use crate::io::{AsyncBufRead, AsyncRead, AsyncWrite};
use pin_project_lite::pin_project;
use std::io::{self, Read};
+use std::mem::MaybeUninit;
use std::pin::Pin;
use std::task::{Context, Poll};
use std::{cmp, fmt};
@@ -45,7 +46,12 @@ impl<R: AsyncRead> BufReader<R> {
unsafe {
let mut buffer = Vec::with_capacity(capacity);
buffer.set_len(capacity);
- inner.prepare_uninitialized_buffer(&mut buffer);
+
+ {
+ // Convert to MaybeUninit
+ let b = &mut *(&mut buffer[..] as *mut [u8] as *mut [MaybeUninit<u8>]);
+ inner.prepare_uninitialized_buffer(b);
+ }
Self {
inner,
buf: buffer.into_boxed_slice(),
@@ -120,7 +126,7 @@ impl<R: AsyncRead> AsyncRead for BufReader<R> {
}
// we can't skip unconditionally because of the large buffer case in read.
- unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [MaybeUninit<u8>]) -> bool {
self.inner.prepare_uninitialized_buffer(buf)
}
}
diff --git a/tokio/src/io/util/buf_stream.rs b/tokio/src/io/util/buf_stream.rs
index 7ff1d3f4..a1676c29 100644
--- a/tokio/src/io/util/buf_stream.rs
+++ b/tokio/src/io/util/buf_stream.rs
@@ -2,11 +2,10 @@ use crate::io::util::{BufReader, BufWriter};
use crate::io::{AsyncBufRead, AsyncRead, AsyncWrite};
use pin_project_lite::pin_project;
-use std::io::{self};
-use std::{
- pin::Pin,
- task::{Context, Poll},
-};
+use std::io;
+use std::mem::MaybeUninit;
+use std::pin::Pin;
+use std::task::{Context, Poll};
pin_project! {
/// Wraps a type that is [`AsyncWrite`] and [`AsyncRead`], and buffers its input and output.
@@ -126,7 +125,7 @@ impl<RW: AsyncRead + AsyncWrite> AsyncRead for BufStream<RW> {
}
// we can't skip unconditionally because of the large buffer case in read.
- unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [MaybeUninit<u8>]) -> bool {
self.inner.prepare_uninitialized_buffer(buf)
}
}
diff --git a/tokio/src/io/util/buf_writer.rs b/tokio/src/io/util/buf_writer.rs
index 5c98bd82..e7ae57a0 100644
--- a/tokio/src/io/util/buf_writer.rs
+++ b/tokio/src/io/util/buf_writer.rs
@@ -4,6 +4,7 @@ use crate::io::{AsyncBufRead, AsyncRead, AsyncWrite};
use pin_project_lite::pin_project;
use std::fmt;
use std::io::{self, Write};
+use std::mem::MaybeUninit;
use std::pin::Pin;
use std::task::{Context, Poll};
@@ -152,7 +153,7 @@ impl<W: AsyncWrite + AsyncRead> AsyncRead for BufWriter<W> {
}
// we can't skip unconditionally because of the large buffer case in read.
- unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [MaybeUninit<u8>]) -> bool {
self.get_ref().prepare_uninitialized_buffer(buf)
}
}
diff --git a/tokio/src/io/util/read_to_end.rs b/tokio/src/io/util/read_to_end.rs
index 36eba5bb..0cd91f84 100644
--- a/tokio/src/io/util/read_to_end.rs
+++ b/tokio/src/io/util/read_to_end.rs
@@ -2,6 +2,7 @@ use crate::io::AsyncRead;
use std::future::Future;
use std::io;
+use std::mem::MaybeUninit;
use std::pin::Pin;
use std::task::{Context, Poll};
@@ -64,7 +65,10 @@ pub(super) fn read_to_end_internal<R: AsyncRead + ?Sized>(
g.buf.reserve(32);
let capacity = g.buf.capacity();
g.buf.set_len(capacity);
- rd.prepare_uninitialized_buffer(&mut g.buf[g.len..]);
+
+ let b = &mut *(&mut g.buf[g.len..] as *mut [u8] as *mut [MaybeUninit<u8>]);
+
+ rd.prepare_uninitialized_buffer(b);
}
}
diff --git a/tokio/src/io/util/take.rs b/tokio/src/io/util/take.rs
index 86403853..18332603 100644
--- a/tokio/src/io/util/take.rs
+++ b/tokio/src/io/util/take.rs
@@ -1,6 +1,7 @@
use crate::io::{AsyncBufRead, AsyncRead};
use pin_project_lite::pin_project;
+use std::mem::MaybeUninit;
use std::pin::Pin;
use std::task::{Context, Poll};
use std::{cmp, io};
@@ -74,7 +75,7 @@ impl<R: AsyncRead> Take<R> {
}
impl<R: AsyncRead> AsyncRead for Take<R> {
- unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [MaybeUninit<u8>]) -> bool {
self.inner.prepare_uninitialized_buffer(buf)
}
diff --git a/tokio/src/net/tcp/split.rs b/tokio/src/net/tcp/split.rs
index 07c7c3ff..2b337c08 100644
--- a/tokio/src/net/tcp/split.rs
+++ b/tokio/src/net/tcp/split.rs
@@ -11,8 +11,8 @@
use crate::io::{AsyncRead, AsyncWrite};
use crate::net::TcpStream;
-use bytes::{Buf, BufMut};
use std::io;
+use std::mem::MaybeUninit;
use std::net::Shutdown;
use std::pin::Pin;
use std::task::{Context, Poll};
@@ -33,7 +33,7 @@ pub(crate) fn split(stream: &mut TcpStream) -> (ReadHalf<'_>, WriteHalf<'_>) {
}
impl AsyncRead for ReadHalf<'_> {
- unsafe fn prepare_uninitialized_buffer(&self, _: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, _: &mut [MaybeUninit<u8>]) -> bool {
false
}
@@ -44,14 +44,6 @@ impl AsyncRead for ReadHalf<'_> {
) -> Poll<io::Result<usize>> {
self.0.poll_read_priv(cx, buf)
}
-
- fn poll_read_buf<B: BufMut>(
- self: Pin<&mut Self>,
- cx: &mut Context<'_>,
- buf: &mut B,
- ) -> Poll<io::Result<usize>> {
- self.0.poll_read_buf_priv(cx, buf)
- }
}
impl AsyncWrite for WriteHalf<'_> {
@@ -73,14 +65,6 @@ impl AsyncWrite for WriteHalf<'_> {
fn poll_shutdown(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<io::Result<()>> {
self.0.shutdown(Shutdown::Write).into()
}
-
- 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)
- }
}
impl AsRef<TcpStream> for ReadHalf<'_> {
diff --git a/tokio/src/net/tcp/stream.rs b/tokio/src/net/tcp/stream.rs
index b73114b4..34d3a493 100644
--- a/tokio/src/net/tcp/stream.rs
+++ b/tokio/src/net/tcp/stream.rs
@@ -3,11 +3,10 @@ use crate::io::{AsyncRead, AsyncWrite, PollEvented};
use crate::net::tcp::split::{split, ReadHalf, WriteHalf};
use crate::net::ToSocketAddrs;
-use bytes::{Buf, BufMut};
-use iovec::IoVec;
use std::convert::TryFrom;
use std::fmt;
use std::io::{self, Read, Write};
+use std::mem::MaybeUninit;
use std::net::{self, Shutdown, SocketAddr};
use std::pin::Pin;
use std::task::{Context, Poll};
@@ -601,70 +600,6 @@ impl TcpStream {
}
}
- pub(crate) fn poll_read_buf_priv<B: BufMut>(
- &self,
- cx: &mut Context<'_>,
- buf: &mut B,
- ) -> Poll<io::Result<usize>> {
- ready!(self.io.poll_read_ready(cx, mio::Ready::readable()))?;
-
- let r = unsafe {
- // The `IoVec` type can't have a 0-length size, so we create a bunch
- // of dummy versions on the stack with 1 length which we'll quickly
- // overwrite.
- let b1: &mut [u8] = &mut [0];
- let b2: &mut [u8] = &mut [0];
- let b3: &mut [u8] = &mut [0];
- let b4: &mut [u8] = &mut [0];
- let b5: &mut [u8] = &mut [0];
- let b6: &mut [u8] = &mut [0];
- let b7: &mut [u8] = &mut [0];
- let b8: &mut [u8] = &mut [0];
- let b9: &mut [u8] = &mut [0];
- let b10: &mut [u8] = &mut [0];
- let b11: &mut [u8] = &mut [0];
- let b12: &mut [u8] = &mut [0];
- let b13: &mut [u8] = &mut [0];
- let b14: &mut [u8] = &mut [0];
- let b15: &mut [u8] = &mut [0];
- let b16: &mut [u8] = &mut [0];
- let mut bufs: [&mut IoVec; 16] = [
- b1.into(),
- b2.into(),
- b3.into(),
- b4.into(),
- b5.into(),
- b6.into(),
- b7.into(),
- b8.into(),
- b9.into(),
- b10.into(),
- b11.into(),
- b12.into(),
- b13.into(),
- b14.into(),
- b15.into(),
- b16.into(),
- ];
- let n = buf.bytes_vec_mut(&mut bufs);
- self.io.get_ref().read_bufs(&mut bufs[..n])
- };
-
- match r {
- Ok(n) => {
- unsafe {
- buf.advance_mut(n);
- }
- Poll::Ready(Ok(n))
- }
- Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
- self.io.clear_read_ready(cx, mio::Ready::readable())?;
- Poll::Pending
- }
- Err(e) => Poll::Ready(Err(e)),
- }
- }
-
pub(crate) fn poll_write_priv(
&self,
cx: &mut Context<'_>,
@@ -680,36 +615,6 @@ impl TcpStream {
x => Poll::Ready(x),
}
}
-
- pub(crate) fn poll_write_buf_priv<B: Buf>(
- &self,
- cx: &mut Context<'_>,
- buf: &mut B,
- ) -> Poll<io::Result<usize>> {
- ready!(self.io.poll_write_ready(cx))?;
-
- let r = {
- // The `IoVec` 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_vec` method.
- static DUMMY: &[u8] = &[0];
- let iovec = <&IoVec>::from(DUMMY);
- let mut bufs = [iovec; 64];
- let n = buf.bytes_vec(&mut bufs);
- self.io.get_ref().write_bufs(&bufs[..n])
- };
- match r {
- Ok(n) => {
- buf.advance(n);
- Poll::Ready(Ok(n))
- }
- Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
- self.io.clear_write_ready(cx)?;
- Poll::Pending
- }
- Err(e) => Poll::Ready(Err(e)),
- }
- }
}
impl TryFrom<TcpStream> for mio::net::TcpStream {
@@ -741,7 +646,7 @@ impl TryFrom<net::TcpStream> for TcpStream {
// ===== impl Read / Write =====
impl AsyncRead for TcpStream {
- unsafe fn prepare_uninitialized_buffer(&self, _: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, _: &mut [MaybeUninit<u8>]) -> bool {
false
}
@@ -752,14 +657,6 @@ impl AsyncRead for TcpStream {
) -> Poll<io::Result<usize>> {
self.poll_read_priv(cx, buf)
}
-
- fn poll_read_buf<B: BufMut>(
- self: Pin<&mut Self>,
- cx: &mut Context<'_>,
- buf: &mut B,
- ) -> Poll<io::Result<usize>> {
- self.poll_read_buf_priv(cx, buf)
- }
}
impl AsyncWrite for TcpStream {
@@ -781,14 +678,6 @@ impl AsyncWrite for TcpStream {
self.shutdown(std::net::Shutdown::Write)?;
Poll::Ready(Ok(()))
}
-
- 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)
- }
}
impl fmt::Debug for TcpStream {
diff --git a/tokio/src/net/unix/split.rs b/tokio/src/net/unix/split.rs
index f9bb7e9a..9b9fa5ee 100644
--- a/tokio/src/net/unix/split.rs
+++ b/tokio/src/net/unix/split.rs
@@ -11,8 +11,8 @@
use crate::io::{AsyncRead, AsyncWrite};
use crate::net::UnixStream;
-use bytes::{Buf, BufMut};
use std::io;
+use std::mem::MaybeUninit;
use std::net::Shutdown;
use std::pin::Pin;
use std::task::{Context, Poll};
@@ -30,7 +30,7 @@ pub(crate) fn split(stream: &mut UnixStream) -> (ReadHalf<'_>, WriteHalf<'_>) {
}
impl AsyncRead for ReadHalf<'_> {
- unsafe fn prepare_uninitialized_buffer(&self, _: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, _: &mut [MaybeUninit<u8>]) -> bool {
false
}
@@ -41,14 +41,6 @@ impl AsyncRead for ReadHalf<'_> {
) -> Poll<io::Result<usize>> {
self.0.poll_read_priv(cx, buf)
}
-
- fn poll_read_buf<B: BufMut>(
- self: Pin<&mut Self>,
- cx: &mut Context<'_>,
- buf: &mut B,
- ) -> Poll<io::Result<usize>> {
- self.0.poll_read_buf_priv(cx, buf)
- }
}
impl AsyncWrite for WriteHalf<'_> {
@@ -67,14 +59,6 @@ impl AsyncWrite for WriteHalf<'_> {
fn poll_shutdown(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<io::Result<()>> {
self.0.shutdown(Shutdown::Write).into()
}
-
- 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)
- }
}
impl AsRef<UnixStream> for ReadHalf<'_> {
diff --git a/tokio/src/net/unix/stream.rs b/tokio/src/net/unix/stream.rs
index 7a226994..a430fa17 100644
--- a/tokio/src/net/unix/stream.rs
+++ b/tokio/src/net/unix/stream.rs
@@ -3,11 +3,10 @@ use crate::io::{AsyncRead, AsyncWrite, PollEvented};
use crate::net::unix::split::{split, ReadHalf, WriteHalf};
use crate::net::unix::ucred::{self, UCred};
-use bytes::{Buf, BufMut};
-use iovec::IoVec;
use std::convert::TryFrom;
use std::fmt;
use std::io::{self, Read, Write};
+use std::mem::MaybeUninit;
use std::net::Shutdown;
use std::os::unix::io::{AsRawFd, RawFd};
use std::os::unix::net::{self, SocketAddr};
@@ -137,7 +136,7 @@ impl TryFrom<net::UnixStream> for UnixStream {
}
impl AsyncRead for UnixStream {
- unsafe fn prepare_uninitialized_buffer(&self, _: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, _: &mut [MaybeUninit<u8>]) -> bool {
false
}
@@ -148,14 +147,6 @@ impl AsyncRead for UnixStream {
) -> Poll<io::Result<usize>> {
self.poll_read_priv(cx, buf)
}
-
- fn poll_read_buf<B: BufMut>(
- self: Pin<&mut Self>,
- cx: &mut Context<'_>,
- buf: &mut B,
- ) -> Poll<io::Result<usize>> {
- self.poll_read_buf_priv(cx, buf)
- }
}
impl AsyncWrite for UnixStream {
@@ -174,14 +165,6 @@ impl AsyncWrite for UnixStream {
fn poll_shutdown(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<io::Result<()>> {
Poll::Ready(Ok(()))
}
-
- 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)
- }
}
impl UnixStream {
@@ -212,70 +195,6 @@ impl UnixStream {
}
}
- pub(crate) fn poll_read_buf_priv<B: BufMut>(
- &self,
- cx: &mut Context<'_>,
- buf: &mut B,
- ) -> Poll<io::Result<usize>> {
- ready!(self.io.poll_read_ready(cx, mio::Ready::readable()))?;
-
- let r = unsafe {
- // The `IoVec` type can't have a 0-length size, so we create a bunch
- // of dummy versions on the stack with 1 length which we'll quickly
- // overwrite.
- let b1: &mut [u8] = &mut [0];
- let b2: &mut [u8] = &mut [0];
- let b3: &mut [u8] = &mut [0];
- let b4: &mut [u8] = &mut [0];
- let b5: &mut [u8] = &mut [0];
- let b6: &mut [u8] = &mut [0];
- let b7: &mut [u8] = &mut [0];
- let b8: &mut [u8] = &mut [0];
- let b9: &mut [u8] = &mut [0];
- let b10: &mut [u8] = &mut [0];
- let b11: &mut [u8] = &mut [0];
- let b12: &mut [u8] = &mut [0];
- let b13: &mut [u8] = &mut [0];
- let b14: &mut [u8] = &mut [0];
- let b15: &mut [u8] = &mut [0];
- let b16: &mut [u8] = &mut [0];
- let mut bufs: [&mut IoVec; 16] = [
- b1.into(),
- b2.into(),
- b3.into(),
- b4.into(),
- b5.into(),
- b6.into(),
- b7.into(),
- b8.into(),
- b9.into(),
- b10.into(),
- b11.into(),
- b12.into(),
- b13.into(),
- b14.into(),
- b15.into(),
- b16.into(),
- ];
- let n = buf.bytes_vec_mut(&mut bufs);
- self.io.get_ref().read_bufs(&mut bufs[..n])
- };
-
- match r {
- Ok(n) => {
- unsafe {
- buf.advance_mut(n);
- }
- Poll::Ready(Ok(n))
- }
- Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
- self.io.clear_read_ready(cx, mio::Ready::readable())?;
- Poll::Pending
- }
- Err(e) => Poll::Ready(Err(e)),
- }
- }
-
pub(crate) fn poll_write_priv(
&self,
cx: &mut Context<'_>,
@@ -291,36 +210,6 @@ impl UnixStream {
x => Poll::Ready(x),
}
}
-
- pub(crate) fn poll_write_buf_priv<B: Buf>(
- &self,
- cx: &mut Context<'_>,
- buf: &mut B,
- ) -> Poll<io::Result<usize>> {
- ready!(self.io.poll_write_ready(cx))?;
-
- let r = {
- // The `IoVec` 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_vec` method.
- static DUMMY: &[u8] = &[0];
- let iovec = <&IoVec>::from(DUMMY);
- let mut bufs = [iovec; 64];
- let n = buf.bytes_vec(&mut bufs);
- self.io.get_ref().write_bufs(&bufs[..n])
- };
- match r {
- Ok(n) => {
- buf.advance(n);
- Poll::Ready(Ok(n))
- }
- Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
- self.io.clear_write_ready(cx)?;
- Poll::Pending
- }
- Err(e) => Poll::Ready(Err(e)),
- }
- }
}
impl fmt::Debug for UnixStream {
diff --git a/tokio/tests/io_async_read.rs b/tokio/tests/io_async_read.rs
index 007e5403..0b9509e1 100644
--- a/tokio/tests/io_async_read.rs
+++ b/tokio/tests/io_async_read.rs
@@ -4,6 +4,7 @@ use tokio_test::{assert_ready_err, assert_ready_ok};
use bytes::{BufMut, BytesMut};
use std::io;
+use std::mem::MaybeUninit;
use std::pin::Pin;
use std::task::{Context, Poll};
@@ -75,12 +76,10 @@ fn read_buf_no_capacity() {
}
}
- // Can't create BytesMut w/ zero capacity, so fill it up
- let mut buf = BytesMut::with_capacity(64);
- buf.put(&[0; 64][..]);
+ let mut buf = [0u8; 0];
task::spawn(Rd).enter(|cx, rd| {
- let n = assert_ready_ok!(rd.poll_read_buf(cx, &mut buf));
+ let n = assert_ready_ok!(rd.poll_read_buf(cx, &mut &mut buf[..]));
assert_eq!(0, n);
});
}
@@ -116,7 +115,7 @@ fn read_buf_uninitialized_ok() {
struct Rd;
impl AsyncRead for Rd {
- unsafe fn prepare_uninitialized_buffer(&self, _: &mut [u8]) -> bool {
+ unsafe fn prepare_uninitialized_buffer(&self, _: &mut [MaybeUninit<u8>]) -> bool {
false
}
@@ -134,7 +133,8 @@ fn read_buf_uninitialized_ok() {
let mut buf = BytesMut::with_capacity(64);
unsafe {
- buf.bytes_mut()[0..11].copy_from_slice(b"hello world");
+ let b: &mut [u8] = std::mem::transmute(buf.bytes_mut());
+ b[0..11].copy_from_slice(b"hello world");
}
task::spawn(Rd).enter(|cx, rd| {