Snap for 8310876 from 7d19bccfe157d2a9d2872530f6d7602a8d7742de to mainline-adservices-release

Change-Id: I4fe483791d385034cbc1bb269b893eedd6da8dc5
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index ffd4f55..3d43471 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,6 @@
 {
   "git": {
-    "sha1": "7caefa51304e78fd5018cd5d2a03f3b9089cc010"
-  }
-}
+    "sha1": "fc1e3250219170e31cddb8857a276cba7dd08d44"
+  },
+  "path_in_vcs": "futures-io"
+}
\ No newline at end of file
diff --git a/Android.bp b/Android.bp
index c6e2f27..ba96032 100644
--- a/Android.bp
+++ b/Android.bp
@@ -42,7 +42,7 @@
     host_supported: true,
     crate_name: "futures_io",
     cargo_env_compat: true,
-    cargo_pkg_version: "0.3.17",
+    cargo_pkg_version: "0.3.21",
     srcs: ["src/lib.rs"],
     edition: "2018",
     features: [
diff --git a/Cargo.toml b/Cargo.toml
index 4ae4cb4..9494c45 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,22 +11,26 @@
 
 [package]
 edition = "2018"
+rust-version = "1.36"
 name = "futures-io"
-version = "0.3.17"
-authors = ["Alex Crichton <alex@alexcrichton.com>"]
-description = "The `AsyncRead`, `AsyncWrite`, `AsyncSeek`, and `AsyncBufRead` traits for the futures-rs library.\n"
+version = "0.3.21"
+description = """
+The `AsyncRead`, `AsyncWrite`, `AsyncSeek`, and `AsyncBufRead` traits for the futures-rs library.
+"""
 homepage = "https://rust-lang.github.io/futures-rs"
-documentation = "https://docs.rs/futures-io/0.3"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang/futures-rs"
+
 [package.metadata.docs.rs]
 all-features = true
-rustdoc-args = ["--cfg", "docsrs"]
+rustdoc-args = [
+    "--cfg",
+    "docsrs",
+]
 
 [dependencies]
 
 [features]
 default = ["std"]
-read-initializer = []
 std = []
 unstable = []
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 2e5abba..8d44694 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,12 +1,11 @@
 [package]
 name = "futures-io"
+version = "0.3.21"
 edition = "2018"
-version = "0.3.17"
-authors = ["Alex Crichton <alex@alexcrichton.com>"]
+rust-version = "1.36"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang/futures-rs"
 homepage = "https://rust-lang.github.io/futures-rs"
-documentation = "https://docs.rs/futures-io/0.3"
 description = """
 The `AsyncRead`, `AsyncWrite`, `AsyncSeek`, and `AsyncBufRead` traits for the futures-rs library.
 """
@@ -19,7 +18,6 @@
 # These features are outside of the normal semver guarantees and require the
 # `unstable` feature as an explicit opt-in to unstable API.
 unstable = []
-read-initializer = []
 
 [dependencies]
 
diff --git a/METADATA b/METADATA
index 5657c84..5de28ef 100644
--- a/METADATA
+++ b/METADATA
@@ -7,13 +7,13 @@
   }
   url {
     type: ARCHIVE
-    value: "https://static.crates.io/crates/futures-io/futures-io-0.3.17.crate"
+    value: "https://static.crates.io/crates/futures-io/futures-io-0.3.21.crate"
   }
-  version: "0.3.17"
+  version: "0.3.21"
   license_type: NOTICE
   last_upgrade_date {
-    year: 2021
-    month: 9
-    day: 22
+    year: 2022
+    month: 3
+    day: 1
   }
 }
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..da6eec2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,23 @@
+# futures-io
+
+The `AsyncRead`, `AsyncWrite`, `AsyncSeek`, and `AsyncBufRead` traits for the futures-rs library.
+
+## Usage
+
+Add this to your `Cargo.toml`:
+
+```toml
+[dependencies]
+futures-io = "0.3"
+```
+
+The current `futures-io` requires Rust 1.36 or later.
+
+## License
+
+Licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or
+[MIT license](LICENSE-MIT) at your option.
+
+Unless you explicitly state otherwise, any contribution intentionally submitted
+for inclusion in the work by you, as defined in the Apache-2.0 license, shall
+be dual licensed as above, without any additional terms or conditions.
diff --git a/src/lib.rs b/src/lib.rs
index 7e03b8e..e91eb78 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -8,7 +8,6 @@
 //! All items of this library are only available when the `std` feature of this
 //! library is activated, and it is activated by default.
 
-#![cfg_attr(all(feature = "read-initializer", feature = "std"), feature(read_initializer))]
 #![cfg_attr(not(feature = "std"), no_std)]
 #![warn(missing_debug_implementations, missing_docs, rust_2018_idioms, unreachable_pub)]
 // It cannot be included in the published code because this lints have false positives in the minimum required version.
@@ -22,9 +21,6 @@
 ))]
 #![cfg_attr(docsrs, feature(doc_cfg))]
 
-#[cfg(all(feature = "read-initializer", not(feature = "unstable")))]
-compile_error!("The `read-initializer` feature requires the `unstable` feature as an explicit opt-in to unstable features");
-
 #[cfg(feature = "std")]
 mod if_std {
     use std::io;
@@ -34,11 +30,6 @@
 
     // Re-export some types from `std::io` so that users don't have to deal
     // with conflicts when `use`ing `futures::io` and `std::io`.
-    #[cfg(feature = "read-initializer")]
-    #[cfg_attr(docsrs, doc(cfg(feature = "read-initializer")))]
-    #[doc(no_inline)]
-    #[allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411
-    pub use io::Initializer;
     #[allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411
     #[doc(no_inline)]
     pub use io::{Error, ErrorKind, IoSlice, IoSliceMut, Result, SeekFrom};
@@ -51,27 +42,6 @@
     /// for wakeup and return if data is not yet available, rather than blocking
     /// the calling thread.
     pub trait AsyncRead {
-        /// Determines if this `AsyncRead`er can work with buffers of
-        /// uninitialized memory.
-        ///
-        /// The default implementation returns an initializer which will zero
-        /// buffers.
-        ///
-        /// This method is only available when the `read-initializer` feature of this
-        /// library is activated.
-        ///
-        /// # Safety
-        ///
-        /// This method is `unsafe` because an `AsyncRead`er could otherwise
-        /// return a non-zeroing `Initializer` from another `AsyncRead` type
-        /// without an `unsafe` block.
-        #[cfg(feature = "read-initializer")]
-        #[cfg_attr(docsrs, doc(cfg(feature = "read-initializer")))]
-        #[inline]
-        unsafe fn initializer(&self) -> Initializer {
-            Initializer::zeroing()
-        }
-
         /// Attempt to read from the `AsyncRead` into `buf`.
         ///
         /// On success, returns `Poll::Ready(Ok(num_bytes_read))`.
@@ -329,11 +299,6 @@
 
     macro_rules! deref_async_read {
         () => {
-            #[cfg(feature = "read-initializer")]
-            unsafe fn initializer(&self) -> Initializer {
-                (**self).initializer()
-            }
-
             fn poll_read(
                 mut self: Pin<&mut Self>,
                 cx: &mut Context<'_>,
@@ -365,11 +330,6 @@
         P: DerefMut + Unpin,
         P::Target: AsyncRead,
     {
-        #[cfg(feature = "read-initializer")]
-        unsafe fn initializer(&self) -> Initializer {
-            (**self).initializer()
-        }
-
         fn poll_read(
             self: Pin<&mut Self>,
             cx: &mut Context<'_>,
@@ -389,11 +349,6 @@
 
     macro_rules! delegate_async_read_to_stdio {
         () => {
-            #[cfg(feature = "read-initializer")]
-            unsafe fn initializer(&self) -> Initializer {
-                io::Read::initializer(self)
-            }
-
             fn poll_read(
                 mut self: Pin<&mut Self>,
                 _: &mut Context<'_>,