summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikail Bagishov <bagishov.mikail@yandex.ru>2020-05-21 20:42:28 +0300
committerGitHub <noreply@github.com>2020-05-21 19:42:28 +0200
commit1e54a35325fa371d61c428ead5879a6bb1b0ddf6 (patch)
tree447d100ec00371b09f3aa3da99f00e6a0d0fecb8
parent4f4f4807c3fe21cbfde82d894f044636b52cb04b (diff)
io: remove zeroing for AsyncRead implementors (#2525)
-rw-r--r--tokio/src/fs/file.rs5
-rw-r--r--tokio/src/io/async_read.rs2
-rw-r--r--tokio/src/io/mod.rs1
-rw-r--r--tokio/src/io/stdin.rs5
-rw-r--r--tokio/src/io/util/chain.rs9
-rw-r--r--tokio/src/io/util/empty.rs3
-rw-r--r--tokio/src/io/util/repeat.rs3
-rw-r--r--tokio/src/process/mod.rs10
8 files changed, 37 insertions, 1 deletions
diff --git a/tokio/src/fs/file.rs b/tokio/src/fs/file.rs
index cc4a187d..f3bc9854 100644
--- a/tokio/src/fs/file.rs
+++ b/tokio/src/fs/file.rs
@@ -537,6 +537,11 @@ impl File {
}
impl AsyncRead for File {
+ unsafe fn prepare_uninitialized_buffer(&self, _buf: &mut [std::mem::MaybeUninit<u8>]) -> bool {
+ // https://github.com/rust-lang/rust/blob/09c817eeb29e764cfc12d0a8d94841e3ffe34023/src/libstd/fs.rs#L668
+ false
+ }
+
fn poll_read(
mut self: Pin<&mut Self>,
cx: &mut Context<'_>,
diff --git a/tokio/src/io/async_read.rs b/tokio/src/io/async_read.rs
index cc9091c9..a42c4ff2 100644
--- a/tokio/src/io/async_read.rs
+++ b/tokio/src/io/async_read.rs
@@ -76,7 +76,7 @@ pub trait AsyncRead {
/// [`poll_read_buf`]: #method.poll_read_buf
unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [MaybeUninit<u8>]) -> bool {
for x in buf {
- *x.as_mut_ptr() = 0;
+ *x = MaybeUninit::new(0);
}
true
diff --git a/tokio/src/io/mod.rs b/tokio/src/io/mod.rs
index eddd6122..cb975f37 100644
--- a/tokio/src/io/mod.rs
+++ b/tokio/src/io/mod.rs
@@ -183,6 +183,7 @@ mod async_buf_read;
pub use self::async_buf_read::AsyncBufRead;
mod async_read;
+
pub use self::async_read::AsyncRead;
mod async_seek;
diff --git a/tokio/src/io/stdin.rs b/tokio/src/io/stdin.rs
index d986d3ab..325b8757 100644
--- a/tokio/src/io/stdin.rs
+++ b/tokio/src/io/stdin.rs
@@ -63,6 +63,11 @@ impl std::os::windows::io::AsRawHandle for Stdin {
}
impl AsyncRead for Stdin {
+ unsafe fn prepare_uninitialized_buffer(&self, _buf: &mut [std::mem::MaybeUninit<u8>]) -> bool {
+ // https://github.com/rust-lang/rust/blob/09c817eeb29e764cfc12d0a8d94841e3ffe34023/src/libstd/io/stdio.rs#L97
+ false
+ }
+
fn poll_read(
mut self: Pin<&mut Self>,
cx: &mut Context<'_>,
diff --git a/tokio/src/io/util/chain.rs b/tokio/src/io/util/chain.rs
index bc76af34..8ba9194f 100644
--- a/tokio/src/io/util/chain.rs
+++ b/tokio/src/io/util/chain.rs
@@ -84,6 +84,15 @@ where
T: AsyncRead,
U: AsyncRead,
{
+ unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [std::mem::MaybeUninit<u8>]) -> bool {
+ if self.first.prepare_uninitialized_buffer(buf) {
+ return true;
+ }
+ if self.second.prepare_uninitialized_buffer(buf) {
+ return true;
+ }
+ false
+ }
fn poll_read(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
diff --git a/tokio/src/io/util/empty.rs b/tokio/src/io/util/empty.rs
index 121102c7..576058d5 100644
--- a/tokio/src/io/util/empty.rs
+++ b/tokio/src/io/util/empty.rs
@@ -47,6 +47,9 @@ cfg_io_util! {
}
impl AsyncRead for Empty {
+ unsafe fn prepare_uninitialized_buffer(&self, _buf: &mut [std::mem::MaybeUninit<u8>]) -> bool {
+ false
+ }
#[inline]
fn poll_read(
self: Pin<&mut Self>,
diff --git a/tokio/src/io/util/repeat.rs b/tokio/src/io/util/repeat.rs
index 6b9067e8..eeef7cc1 100644
--- a/tokio/src/io/util/repeat.rs
+++ b/tokio/src/io/util/repeat.rs
@@ -47,6 +47,9 @@ cfg_io_util! {
}
impl AsyncRead for Repeat {
+ unsafe fn prepare_uninitialized_buffer(&self, _buf: &mut [std::mem::MaybeUninit<u8>]) -> bool {
+ false
+ }
#[inline]
fn poll_read(
self: Pin<&mut Self>,
diff --git a/tokio/src/process/mod.rs b/tokio/src/process/mod.rs
index ab3dae18..1d14d69b 100644
--- a/tokio/src/process/mod.rs
+++ b/tokio/src/process/mod.rs
@@ -879,6 +879,11 @@ impl AsyncWrite for ChildStdin {
}
impl AsyncRead for ChildStdout {
+ unsafe fn prepare_uninitialized_buffer(&self, _buf: &mut [std::mem::MaybeUninit<u8>]) -> bool {
+ // https://github.com/rust-lang/rust/blob/09c817eeb29e764cfc12d0a8d94841e3ffe34023/src/libstd/process.rs#L314
+ false
+ }
+
fn poll_read(
mut self: Pin<&mut Self>,
cx: &mut Context<'_>,
@@ -889,6 +894,11 @@ impl AsyncRead for ChildStdout {
}
impl AsyncRead for ChildStderr {
+ unsafe fn prepare_uninitialized_buffer(&self, _buf: &mut [std::mem::MaybeUninit<u8>]) -> bool {
+ // https://github.com/rust-lang/rust/blob/09c817eeb29e764cfc12d0a8d94841e3ffe34023/src/libstd/process.rs#L375
+ false
+ }
+
fn poll_read(
mut self: Pin<&mut Self>,
cx: &mut Context<'_>,