From b83ed8d94d9ceea63a51001bcc1bc8337f5717f6 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Mon, 13 Jan 2025 18:26:26 -0500 Subject: [PATCH 01/19] `net` feature gate in tokio/src/lib.rs (and remove `net` feature gate from tokio/src/net/mod.rs) --- tokio/src/lib.rs | 5 ++++- tokio/src/net/mod.rs | 22 ++++++++++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index b85921f31de..71ff9079f7e 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -506,7 +506,10 @@ cfg_fs! { mod future; pub mod io; -pub mod net; + +cfg_net! { + pub mod net; +} mod loom; diff --git a/tokio/src/net/mod.rs b/tokio/src/net/mod.rs index fdc83f49981..4ceffb51fbf 100644 --- a/tokio/src/net/mod.rs +++ b/tokio/src/net/mod.rs @@ -35,20 +35,18 @@ cfg_not_wasi! { } pub use addr::ToSocketAddrs; -cfg_net! { - mod lookup_host; - pub use lookup_host::lookup_host; +mod lookup_host; +pub use lookup_host::lookup_host; - pub mod tcp; - pub use tcp::listener::TcpListener; - pub use tcp::stream::TcpStream; - cfg_not_wasi! { - pub use tcp::socket::TcpSocket; +pub mod tcp; +pub use tcp::listener::TcpListener; +pub use tcp::stream::TcpStream; +cfg_not_wasi! { + pub use tcp::socket::TcpSocket; - mod udp; - #[doc(inline)] - pub use udp::UdpSocket; - } + mod udp; + #[doc(inline)] + pub use udp::UdpSocket; } cfg_net_unix! { From 7438f6847462d4808cd0d9cb670f32e36375413b Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Mon, 13 Jan 2025 23:57:38 -0500 Subject: [PATCH 02/19] start no-std support with "std" option - build working with limited options at this point: "std", io-util, io-std, parking_lot (parking_lot with & w/o std) --- tokio/Cargo.toml | 10 +++- tokio/src/blocking.rs | 2 + tokio/src/io/async_buf_read.rs | 3 ++ tokio/src/io/async_fd.rs | 1 + tokio/src/io/async_read.rs | 4 ++ tokio/src/io/async_seek.rs | 3 ++ tokio/src/io/async_write.rs | 3 ++ tokio/src/io/blocking.rs | 3 ++ tokio/src/io/join.rs | 1 + tokio/src/io/mod.rs | 2 + tokio/src/io/poll_evented.rs | 1 + tokio/src/io/read_buf.rs | 2 + tokio/src/io/seek.rs | 1 + tokio/src/io/split.rs | 1 + tokio/src/io/stderr.rs | 3 ++ tokio/src/io/stdin.rs | 4 ++ tokio/src/io/stdio_common.rs | 3 ++ tokio/src/io/stdout.rs | 5 ++ tokio/src/io/util/async_buf_read_ext.rs | 1 + tokio/src/io/util/async_read_ext.rs | 2 + tokio/src/io/util/async_seek_ext.rs | 1 + tokio/src/io/util/async_write_ext.rs | 1 + tokio/src/io/util/buf_reader.rs | 1 + tokio/src/io/util/buf_stream.rs | 1 + tokio/src/io/util/buf_writer.rs | 1 + tokio/src/io/util/chain.rs | 1 + tokio/src/io/util/copy.rs | 1 + tokio/src/io/util/copy_bidirectional.rs | 1 + tokio/src/io/util/copy_buf.rs | 2 + tokio/src/io/util/empty.rs | 1 + tokio/src/io/util/fill_buf.rs | 1 + tokio/src/io/util/flush.rs | 1 + tokio/src/io/util/lines.rs | 1 + tokio/src/io/util/mem.rs | 1 + tokio/src/io/util/mod.rs | 2 + tokio/src/io/util/read.rs | 1 + tokio/src/io/util/read_buf.rs | 1 + tokio/src/io/util/read_exact.rs | 1 + tokio/src/io/util/read_int.rs | 1 + tokio/src/io/util/read_line.rs | 1 + tokio/src/io/util/read_to_end.rs | 1 + tokio/src/io/util/read_to_string.rs | 2 + tokio/src/io/util/read_until.rs | 3 ++ tokio/src/io/util/repeat.rs | 1 + tokio/src/io/util/shutdown.rs | 1 + tokio/src/io/util/sink.rs | 1 + tokio/src/io/util/split.rs | 3 ++ tokio/src/io/util/take.rs | 1 + tokio/src/io/util/vec_with_initialized.rs | 4 ++ tokio/src/io/util/write.rs | 1 + tokio/src/io/util/write_all.rs | 1 + tokio/src/io/util/write_all_buf.rs | 1 + tokio/src/io/util/write_buf.rs | 1 + tokio/src/io/util/write_int.rs | 2 + tokio/src/io/util/write_vectored.rs | 1 + tokio/src/lib.rs | 64 +++++++++++++++++++++-- tokio/src/loom/std/atomic_u16.rs | 2 + tokio/src/loom/std/atomic_u32.rs | 2 + tokio/src/loom/std/atomic_u64_native.rs | 2 + tokio/src/loom/std/atomic_usize.rs | 2 + tokio/src/loom/std/barrier.rs | 2 + tokio/src/loom/std/mod.rs | 10 ++++ tokio/src/loom/std/mutex.rs | 2 + tokio/src/loom/std/parking_lot.rs | 2 + tokio/src/loom/std/rwlock.rs | 2 + tokio/src/loom/std/unsafe_cell.rs | 2 + tokio/src/macros/support.rs | 2 + tokio/src/macros/thread_local.rs | 2 +- tokio/src/runtime/context.rs | 2 + tokio/src/runtime/coop.rs | 2 + tokio/src/runtime/driver.rs | 2 + tokio/src/runtime/park.rs | 2 + tokio/src/util/cacheline.rs | 3 +- tokio/src/util/metric_atomics.rs | 2 + 74 files changed, 202 insertions(+), 8 deletions(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index 86017871680..2ca4aea40e9 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -24,6 +24,8 @@ keywords = ["io", "async", "non-blocking", "futures"] [features] # Include nothing by default default = [] +# XXX TODO: +# default = ["std"] # enable everything full = [ @@ -37,14 +39,17 @@ full = [ "rt", "rt-multi-thread", "signal", + "std", "sync", "time", ] +# XXX TODO other features will likely require "std" to work fs = [] -io-util = ["bytes"] +# XXX TBD io-util no-std WITH portable-io +io-util = ["std", "bytes"] # stdin, stdout, stderr -io-std = [] +io-std = ["std"] macros = ["tokio-macros"] net = [ "libc", @@ -81,6 +86,7 @@ signal = [ "windows-sys/Win32_Foundation", "windows-sys/Win32_System_Console", ] +std = [] sync = [] test-util = ["rt", "sync", "time"] time = [] diff --git a/tokio/src/blocking.rs b/tokio/src/blocking.rs index f172399d5ef..45e0fe78c60 100644 --- a/tokio/src/blocking.rs +++ b/tokio/src/blocking.rs @@ -10,6 +10,8 @@ cfg_rt! { } cfg_not_rt! { + use crate::alias::std; + use std::fmt; use std::future::Future; use std::pin::Pin; diff --git a/tokio/src/io/async_buf_read.rs b/tokio/src/io/async_buf_read.rs index f235b80811e..cbd4a84cfaa 100644 --- a/tokio/src/io/async_buf_read.rs +++ b/tokio/src/io/async_buf_read.rs @@ -1,3 +1,6 @@ +use crate::alias::std; +use crate::alias::std::prelude::*; + use crate::io::AsyncRead; use std::io; diff --git a/tokio/src/io/async_fd.rs b/tokio/src/io/async_fd.rs index 8ecc6b95289..83d9f81606e 100644 --- a/tokio/src/io/async_fd.rs +++ b/tokio/src/io/async_fd.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::{Interest, Ready}; use crate::runtime::io::{ReadyEvent, Registration}; use crate::runtime::scheduler; diff --git a/tokio/src/io/async_read.rs b/tokio/src/io/async_read.rs index ca3a435f2b8..ced2c42a035 100644 --- a/tokio/src/io/async_read.rs +++ b/tokio/src/io/async_read.rs @@ -1,4 +1,8 @@ use super::ReadBuf; + +use crate::alias::std; +use crate::alias::std::prelude::*; + use std::io; use std::ops::DerefMut; use std::pin::Pin; diff --git a/tokio/src/io/async_seek.rs b/tokio/src/io/async_seek.rs index bd7a992e4da..dd06ed09aba 100644 --- a/tokio/src/io/async_seek.rs +++ b/tokio/src/io/async_seek.rs @@ -1,3 +1,6 @@ +use crate::alias::std; +use crate::alias::std::prelude::*; + use std::io::{self, SeekFrom}; use std::ops::DerefMut; use std::pin::Pin; diff --git a/tokio/src/io/async_write.rs b/tokio/src/io/async_write.rs index 7ec1a302efa..d6649cfc899 100644 --- a/tokio/src/io/async_write.rs +++ b/tokio/src/io/async_write.rs @@ -1,3 +1,6 @@ +use crate::alias::std; +use crate::alias::std::prelude::*; + use std::io::{self, IoSlice}; use std::ops::DerefMut; use std::pin::Pin; diff --git a/tokio/src/io/blocking.rs b/tokio/src/io/blocking.rs index 1af5065456d..2096f79f35f 100644 --- a/tokio/src/io/blocking.rs +++ b/tokio/src/io/blocking.rs @@ -1,3 +1,6 @@ +use crate::alias::std; +use crate::alias::std::prelude::*; + use crate::io::sys; use crate::io::{AsyncRead, AsyncWrite, ReadBuf}; diff --git a/tokio/src/io/join.rs b/tokio/src/io/join.rs index 6e41f89e867..cd3b3ec9544 100644 --- a/tokio/src/io/join.rs +++ b/tokio/src/io/join.rs @@ -1,5 +1,6 @@ //! Join two values implementing `AsyncRead` and `AsyncWrite` into a single one. +use crate::alias::std; use crate::io::{AsyncBufRead, AsyncRead, AsyncWrite, ReadBuf}; use std::io; diff --git a/tokio/src/io/mod.rs b/tokio/src/io/mod.rs index dc2c4309e66..8cd007848de 100644 --- a/tokio/src/io/mod.rs +++ b/tokio/src/io/mod.rs @@ -194,6 +194,8 @@ cfg_io_blocking! { pub(crate) mod blocking; } +use crate::alias::std; + mod async_buf_read; pub use self::async_buf_read::AsyncBufRead; diff --git a/tokio/src/io/poll_evented.rs b/tokio/src/io/poll_evented.rs index 0e34fbe3c22..81afa04b265 100644 --- a/tokio/src/io/poll_evented.rs +++ b/tokio/src/io/poll_evented.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::interest::Interest; use crate::runtime::io::Registration; use crate::runtime::scheduler; diff --git a/tokio/src/io/read_buf.rs b/tokio/src/io/read_buf.rs index edef84851ec..4392665521b 100644 --- a/tokio/src/io/read_buf.rs +++ b/tokio/src/io/read_buf.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::fmt; use std::mem::MaybeUninit; diff --git a/tokio/src/io/seek.rs b/tokio/src/io/seek.rs index f28faa85455..42087f282e3 100644 --- a/tokio/src/io/seek.rs +++ b/tokio/src/io/seek.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::AsyncSeek; use pin_project_lite::pin_project; diff --git a/tokio/src/io/split.rs b/tokio/src/io/split.rs index 453508eda55..479fda82756 100644 --- a/tokio/src/io/split.rs +++ b/tokio/src/io/split.rs @@ -4,6 +4,7 @@ //! To restore this read/write object from its `split::ReadHalf` and //! `split::WriteHalf` use `unsplit`. +use crate::alias::std; use crate::io::{AsyncRead, AsyncWrite, ReadBuf}; use std::fmt; diff --git a/tokio/src/io/stderr.rs b/tokio/src/io/stderr.rs index 0988e2d9da0..797f058f11c 100644 --- a/tokio/src/io/stderr.rs +++ b/tokio/src/io/stderr.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::blocking::Blocking; use crate::io::stdio_common::SplitByUtf8BoundaryIfWindows; use crate::io::AsyncWrite; @@ -79,6 +80,8 @@ cfg_io_std! { #[cfg(unix)] mod sys { + use crate::alias::std; + use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, RawFd}; use super::Stderr; diff --git a/tokio/src/io/stdin.rs b/tokio/src/io/stdin.rs index 877c48b30fb..9c028c11439 100644 --- a/tokio/src/io/stdin.rs +++ b/tokio/src/io/stdin.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use crate::io::blocking::Blocking; use crate::io::{AsyncRead, ReadBuf}; @@ -54,6 +56,8 @@ cfg_io_std! { #[cfg(unix)] mod sys { + use crate::alias::std; + use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, RawFd}; use super::Stdin; diff --git a/tokio/src/io/stdio_common.rs b/tokio/src/io/stdio_common.rs index 4adbfe23606..58ed2480d46 100644 --- a/tokio/src/io/stdio_common.rs +++ b/tokio/src/io/stdio_common.rs @@ -1,5 +1,8 @@ //! Contains utilities for stdout and stderr. + +use crate::alias::std; use crate::io::AsyncWrite; + use std::pin::Pin; use std::task::{Context, Poll}; /// # Windows diff --git a/tokio/src/io/stdout.rs b/tokio/src/io/stdout.rs index f46ca0f05c4..d7bec35f8b8 100644 --- a/tokio/src/io/stdout.rs +++ b/tokio/src/io/stdout.rs @@ -1,6 +1,9 @@ +use crate::alias::std; + use crate::io::blocking::Blocking; use crate::io::stdio_common::SplitByUtf8BoundaryIfWindows; use crate::io::AsyncWrite; + use std::io; use std::pin::Pin; use std::task::Context; @@ -128,6 +131,8 @@ cfg_io_std! { #[cfg(unix)] mod sys { + use crate::alias::std; + use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, RawFd}; use super::Stdout; diff --git a/tokio/src/io/util/async_buf_read_ext.rs b/tokio/src/io/util/async_buf_read_ext.rs index 1e9da4c8c4d..247a8a7a183 100644 --- a/tokio/src/io/util/async_buf_read_ext.rs +++ b/tokio/src/io/util/async_buf_read_ext.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::io::util::fill_buf::{fill_buf, FillBuf}; use crate::io::util::lines::{lines, Lines}; use crate::io::util::read_line::{read_line, ReadLine}; diff --git a/tokio/src/io/util/async_read_ext.rs b/tokio/src/io/util/async_read_ext.rs index 8c80385128f..cd88e12659d 100644 --- a/tokio/src/io/util/async_read_ext.rs +++ b/tokio/src/io/util/async_read_ext.rs @@ -1,3 +1,5 @@ +use crate::alias::std::prelude::*; + use crate::io::util::chain::{chain, Chain}; use crate::io::util::read::{read, Read}; use crate::io::util::read_buf::{read_buf, ReadBuf}; diff --git a/tokio/src/io/util/async_seek_ext.rs b/tokio/src/io/util/async_seek_ext.rs index aadf3a76a96..f6ffe8c58ad 100644 --- a/tokio/src/io/util/async_seek_ext.rs +++ b/tokio/src/io/util/async_seek_ext.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::seek::{seek, Seek}; use crate::io::AsyncSeek; use std::io::SeekFrom; diff --git a/tokio/src/io/util/async_write_ext.rs b/tokio/src/io/util/async_write_ext.rs index 2760e912930..d178ecf2ee2 100644 --- a/tokio/src/io/util/async_write_ext.rs +++ b/tokio/src/io/util/async_write_ext.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::util::flush::{flush, Flush}; use crate::io::util::shutdown::{shutdown, Shutdown}; use crate::io::util::write::{write, Write}; diff --git a/tokio/src/io/util/buf_reader.rs b/tokio/src/io/util/buf_reader.rs index c89fe43dc1a..ff50fb6b1c1 100644 --- a/tokio/src/io/util/buf_reader.rs +++ b/tokio/src/io/util/buf_reader.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::io::util::DEFAULT_BUF_SIZE; use crate::io::{AsyncBufRead, AsyncRead, AsyncSeek, AsyncWrite, ReadBuf}; diff --git a/tokio/src/io/util/buf_stream.rs b/tokio/src/io/util/buf_stream.rs index facdbdefe4c..13e7273229d 100644 --- a/tokio/src/io/util/buf_stream.rs +++ b/tokio/src/io/util/buf_stream.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::util::{BufReader, BufWriter}; use crate::io::{AsyncBufRead, AsyncRead, AsyncSeek, AsyncWrite, ReadBuf}; diff --git a/tokio/src/io/util/buf_writer.rs b/tokio/src/io/util/buf_writer.rs index ea9076ea693..5f2edfed3f7 100644 --- a/tokio/src/io/util/buf_writer.rs +++ b/tokio/src/io/util/buf_writer.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::io::util::DEFAULT_BUF_SIZE; use crate::io::{AsyncBufRead, AsyncRead, AsyncSeek, AsyncWrite, ReadBuf}; diff --git a/tokio/src/io/util/chain.rs b/tokio/src/io/util/chain.rs index 9f1912771b8..696b6c04c6f 100644 --- a/tokio/src/io/util/chain.rs +++ b/tokio/src/io/util/chain.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::{AsyncBufRead, AsyncRead, ReadBuf}; use pin_project_lite::pin_project; diff --git a/tokio/src/io/util/copy.rs b/tokio/src/io/util/copy.rs index 87592608bed..e5308087679 100644 --- a/tokio/src/io/util/copy.rs +++ b/tokio/src/io/util/copy.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::io::{AsyncRead, AsyncWrite, ReadBuf}; use std::future::Future; diff --git a/tokio/src/io/util/copy_bidirectional.rs b/tokio/src/io/util/copy_bidirectional.rs index ea40a3b4c95..d7b5c4d90f2 100644 --- a/tokio/src/io/util/copy_bidirectional.rs +++ b/tokio/src/io/util/copy_bidirectional.rs @@ -1,5 +1,6 @@ use super::copy::CopyBuffer; +use crate::alias::std; use crate::io::{AsyncRead, AsyncWrite}; use std::future::poll_fn; diff --git a/tokio/src/io/util/copy_buf.rs b/tokio/src/io/util/copy_buf.rs index db622e94aae..a3b41cd9d23 100644 --- a/tokio/src/io/util/copy_buf.rs +++ b/tokio/src/io/util/copy_buf.rs @@ -1,4 +1,6 @@ +use crate::alias::std::{self, prelude::*}; use crate::io::{AsyncBufRead, AsyncWrite}; + use std::future::Future; use std::io; use std::pin::Pin; diff --git a/tokio/src/io/util/empty.rs b/tokio/src/io/util/empty.rs index 8821f4f2e35..acbd9508039 100644 --- a/tokio/src/io/util/empty.rs +++ b/tokio/src/io/util/empty.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::util::poll_proceed_and_make_progress; use crate::io::{AsyncBufRead, AsyncRead, AsyncSeek, AsyncWrite, ReadBuf}; diff --git a/tokio/src/io/util/fill_buf.rs b/tokio/src/io/util/fill_buf.rs index bb07c766e24..6949644fd69 100644 --- a/tokio/src/io/util/fill_buf.rs +++ b/tokio/src/io/util/fill_buf.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::AsyncBufRead; use pin_project_lite::pin_project; diff --git a/tokio/src/io/util/flush.rs b/tokio/src/io/util/flush.rs index 42e06bcbb01..41df21e1bfa 100644 --- a/tokio/src/io/util/flush.rs +++ b/tokio/src/io/util/flush.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::AsyncWrite; use pin_project_lite::pin_project; diff --git a/tokio/src/io/util/lines.rs b/tokio/src/io/util/lines.rs index 9472557b498..6d1d45ab7f7 100644 --- a/tokio/src/io/util/lines.rs +++ b/tokio/src/io/util/lines.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::io::util::read_line::read_line_internal; use crate::io::AsyncBufRead; diff --git a/tokio/src/io/util/mem.rs b/tokio/src/io/util/mem.rs index bb5ab1e39e2..764dc43e7e7 100644 --- a/tokio/src/io/util/mem.rs +++ b/tokio/src/io/util/mem.rs @@ -1,5 +1,6 @@ //! In-process memory IO types. +use crate::alias::std; use crate::io::{split, AsyncRead, AsyncWrite, ReadBuf, ReadHalf, WriteHalf}; use crate::loom::sync::Mutex; diff --git a/tokio/src/io/util/mod.rs b/tokio/src/io/util/mod.rs index 44556e867ca..9e00e1276f8 100644 --- a/tokio/src/io/util/mod.rs +++ b/tokio/src/io/util/mod.rs @@ -1,6 +1,8 @@ #![allow(unreachable_pub)] // https://github.com/rust-lang/rust/issues/57411 cfg_io_util! { + use crate::alias::std; + mod async_buf_read_ext; pub use async_buf_read_ext::AsyncBufReadExt; diff --git a/tokio/src/io/util/read.rs b/tokio/src/io/util/read.rs index 26e59c61fa2..8899032bb6d 100644 --- a/tokio/src/io/util/read.rs +++ b/tokio/src/io/util/read.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::{AsyncRead, ReadBuf}; use pin_project_lite::pin_project; diff --git a/tokio/src/io/util/read_buf.rs b/tokio/src/io/util/read_buf.rs index c211e042243..dadf8552139 100644 --- a/tokio/src/io/util/read_buf.rs +++ b/tokio/src/io/util/read_buf.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::AsyncRead; use bytes::BufMut; diff --git a/tokio/src/io/util/read_exact.rs b/tokio/src/io/util/read_exact.rs index e9e5afbf0b9..6d089b9601a 100644 --- a/tokio/src/io/util/read_exact.rs +++ b/tokio/src/io/util/read_exact.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::{AsyncRead, ReadBuf}; use pin_project_lite::pin_project; diff --git a/tokio/src/io/util/read_int.rs b/tokio/src/io/util/read_int.rs index 63324fb5c25..a90a30dab22 100644 --- a/tokio/src/io/util/read_int.rs +++ b/tokio/src/io/util/read_int.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::io::{AsyncRead, ReadBuf}; use bytes::Buf; diff --git a/tokio/src/io/util/read_line.rs b/tokio/src/io/util/read_line.rs index fdcbc417e21..c37280cd839 100644 --- a/tokio/src/io/util/read_line.rs +++ b/tokio/src/io/util/read_line.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::io::util::read_until::read_until_internal; use crate::io::AsyncBufRead; diff --git a/tokio/src/io/util/read_to_end.rs b/tokio/src/io/util/read_to_end.rs index 05665026d29..5ed8c7af2df 100644 --- a/tokio/src/io/util/read_to_end.rs +++ b/tokio/src/io/util/read_to_end.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::io::util::vec_with_initialized::{into_read_buf_parts, VecU8, VecWithInitialized}; use crate::io::{AsyncRead, ReadBuf}; diff --git a/tokio/src/io/util/read_to_string.rs b/tokio/src/io/util/read_to_string.rs index 18196c52502..a99f0f1e6c0 100644 --- a/tokio/src/io/util/read_to_string.rs +++ b/tokio/src/io/util/read_to_string.rs @@ -1,3 +1,5 @@ +use crate::alias::{std, std::prelude::*}; + use crate::io::util::read_line::finish_string_read; use crate::io::util::read_to_end::read_to_end_internal; use crate::io::util::vec_with_initialized::VecWithInitialized; diff --git a/tokio/src/io/util/read_until.rs b/tokio/src/io/util/read_until.rs index fbe2609a64c..442b25a24da 100644 --- a/tokio/src/io/util/read_until.rs +++ b/tokio/src/io/util/read_until.rs @@ -1,3 +1,6 @@ +use crate::alias::std; +use crate::alias::std::prelude::*; + use crate::io::AsyncBufRead; use crate::util::memchr; diff --git a/tokio/src/io/util/repeat.rs b/tokio/src/io/util/repeat.rs index 33a8fd9862b..3c7de12c60e 100644 --- a/tokio/src/io/util/repeat.rs +++ b/tokio/src/io/util/repeat.rs @@ -1,5 +1,6 @@ use bytes::BufMut; +use crate::alias::std; use crate::io::util::poll_proceed_and_make_progress; use crate::io::{AsyncRead, ReadBuf}; diff --git a/tokio/src/io/util/shutdown.rs b/tokio/src/io/util/shutdown.rs index fcd20dc402d..d15bd520f27 100644 --- a/tokio/src/io/util/shutdown.rs +++ b/tokio/src/io/util/shutdown.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::AsyncWrite; use pin_project_lite::pin_project; diff --git a/tokio/src/io/util/sink.rs b/tokio/src/io/util/sink.rs index 01a4b111cc0..edf92204fb9 100644 --- a/tokio/src/io/util/sink.rs +++ b/tokio/src/io/util/sink.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::util::poll_proceed_and_make_progress; use crate::io::AsyncWrite; diff --git a/tokio/src/io/util/split.rs b/tokio/src/io/util/split.rs index 1afd6bbefb9..95423adef15 100644 --- a/tokio/src/io/util/split.rs +++ b/tokio/src/io/util/split.rs @@ -1,3 +1,6 @@ +use crate::alias::std; +use crate::alias::std::prelude::*; + use crate::io::util::read_until::read_until_internal; use crate::io::AsyncBufRead; diff --git a/tokio/src/io/util/take.rs b/tokio/src/io/util/take.rs index b49e00bfcb0..e898f31daa4 100644 --- a/tokio/src/io/util/take.rs +++ b/tokio/src/io/util/take.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::{AsyncBufRead, AsyncRead, ReadBuf}; use pin_project_lite::pin_project; diff --git a/tokio/src/io/util/vec_with_initialized.rs b/tokio/src/io/util/vec_with_initialized.rs index f527492dcd9..c31ef820044 100644 --- a/tokio/src/io/util/vec_with_initialized.rs +++ b/tokio/src/io/util/vec_with_initialized.rs @@ -1,4 +1,8 @@ +use crate::alias::std; +use crate::alias::std::prelude::*; + use crate::io::ReadBuf; + use std::mem::MaybeUninit; /// Something that looks like a `Vec`. diff --git a/tokio/src/io/util/write.rs b/tokio/src/io/util/write.rs index 92169ebc1db..12ccf3987b7 100644 --- a/tokio/src/io/util/write.rs +++ b/tokio/src/io/util/write.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::AsyncWrite; use pin_project_lite::pin_project; diff --git a/tokio/src/io/util/write_all.rs b/tokio/src/io/util/write_all.rs index 8330d89e1fc..db42ca8d2f6 100644 --- a/tokio/src/io/util/write_all.rs +++ b/tokio/src/io/util/write_all.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::AsyncWrite; use pin_project_lite::pin_project; diff --git a/tokio/src/io/util/write_all_buf.rs b/tokio/src/io/util/write_all_buf.rs index 02054913807..5d3443807f7 100644 --- a/tokio/src/io/util/write_all_buf.rs +++ b/tokio/src/io/util/write_all_buf.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::AsyncWrite; use bytes::Buf; diff --git a/tokio/src/io/util/write_buf.rs b/tokio/src/io/util/write_buf.rs index 879dabcb594..3ddd88cf8fd 100644 --- a/tokio/src/io/util/write_buf.rs +++ b/tokio/src/io/util/write_buf.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::AsyncWrite; use bytes::Buf; diff --git a/tokio/src/io/util/write_int.rs b/tokio/src/io/util/write_int.rs index 1eb889097be..c6d6e3d7b5a 100644 --- a/tokio/src/io/util/write_int.rs +++ b/tokio/src/io/util/write_int.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use crate::io::AsyncWrite; use bytes::BufMut; diff --git a/tokio/src/io/util/write_vectored.rs b/tokio/src/io/util/write_vectored.rs index be403229432..33ddf6636cf 100644 --- a/tokio/src/io/util/write_vectored.rs +++ b/tokio/src/io/util/write_vectored.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::AsyncWrite; use pin_project_lite::pin_project; diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index 71ff9079f7e..c5c37a4b683 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -21,6 +21,8 @@ #![cfg_attr(loom, allow(dead_code, unreachable_pub))] #![cfg_attr(windows, allow(rustdoc::broken_intra_doc_links))] +#![no_std] + //! A runtime for writing reliable network applications without compromising speed. //! //! Tokio is an event-driven, non-blocking I/O platform for writing asynchronous @@ -505,12 +507,16 @@ cfg_fs! { mod future; +// XXX TODO SUPPORT no-std with portable-io +#[cfg(feature = "std")] +#[cfg_attr(docsrs, doc(cfg(feature = "std")))] pub mod io; cfg_net! { pub mod net; } +#[cfg(feature = "std")] mod loom; cfg_process! { @@ -528,9 +534,11 @@ mod blocking; cfg_rt! { pub mod runtime; } -cfg_not_rt! { - pub(crate) mod runtime; -} +#[cfg(all( + not(feature = "rt"), + feature = "std") +)] +pub(crate) mod runtime; cfg_signal! { pub mod signal; @@ -560,6 +568,7 @@ cfg_time! { } mod trace { + use crate::alias::std; use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; @@ -645,9 +654,56 @@ pub mod doc; #[allow(unused)] pub(crate) use self::doc::os; +// XXX TBD RECONSIDER possibly unused crate::os - ??? +#[cfg(feature = "std")] #[cfg(not(all(docsrs, unix)))] #[allow(unused)] -pub(crate) use std::os; +pub(crate) use alias::std::os; + +pub(crate) mod alias { + pub(crate) mod std { + pub(crate) mod prelude { + pub(crate) use super::boxed::Box; + pub(crate) use super::string::String; + pub(crate) use super::vec; + pub(crate) use super::vec::Vec; + } + + pub(crate) use core::{cell, convert, cmp, fmt, future, hint, marker, mem, num, ops, pin, slice, task}; + + extern crate alloc; + pub(crate) use alloc::{boxed, rc, str, string, vec}; + + #[cfg(feature = "std")] + extern crate std; + + #[cfg(feature = "std")] + pub(crate) use std::io; + #[cfg(feature = "std")] + pub(crate) use std::{collections, env, hash, os, panic, thread, thread_local}; + + pub(crate) mod sync { + extern crate alloc; + #[cfg(feature = "std")] + extern crate std; + + pub(crate) use core::sync::atomic; + pub(crate) use alloc::sync::*; + #[cfg(feature = "std")] + pub(crate) use std::sync::*; + } + + pub(crate) mod time { + pub(crate) use core::time::*; + + #[cfg(feature = "std")] + extern crate std; + + #[cfg(feature = "std")] + pub(crate) use std::time::*; + } + } +} cfg_macros! { /// Implementation detail of the `select!` macro. This macro is **not** diff --git a/tokio/src/loom/std/atomic_u16.rs b/tokio/src/loom/std/atomic_u16.rs index a9bdcb573c6..c459abe83b5 100644 --- a/tokio/src/loom/std/atomic_u16.rs +++ b/tokio/src/loom/std/atomic_u16.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::cell::UnsafeCell; use std::fmt; use std::ops::Deref; diff --git a/tokio/src/loom/std/atomic_u32.rs b/tokio/src/loom/std/atomic_u32.rs index 004bd9d75f7..6f6eb1d85e5 100644 --- a/tokio/src/loom/std/atomic_u32.rs +++ b/tokio/src/loom/std/atomic_u32.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::cell::UnsafeCell; use std::fmt; use std::ops::Deref; diff --git a/tokio/src/loom/std/atomic_u64_native.rs b/tokio/src/loom/std/atomic_u64_native.rs index 08adb28629a..d198583027c 100644 --- a/tokio/src/loom/std/atomic_u64_native.rs +++ b/tokio/src/loom/std/atomic_u64_native.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + pub(crate) use std::sync::atomic::{AtomicU64, Ordering}; /// Alias `AtomicU64` to `StaticAtomicU64` diff --git a/tokio/src/loom/std/atomic_usize.rs b/tokio/src/loom/std/atomic_usize.rs index 0dee481b68e..c210a79271d 100644 --- a/tokio/src/loom/std/atomic_usize.rs +++ b/tokio/src/loom/std/atomic_usize.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::cell::UnsafeCell; use std::fmt; use std::ops; diff --git a/tokio/src/loom/std/barrier.rs b/tokio/src/loom/std/barrier.rs index a3f0ca0ab6d..7f4d8fdfee8 100644 --- a/tokio/src/loom/std/barrier.rs +++ b/tokio/src/loom/std/barrier.rs @@ -2,6 +2,8 @@ //! //! This implementation mirrors that of the Rust standard library. +use crate::alias::std; + use crate::loom::sync::{Condvar, Mutex}; use std::fmt; use std::time::{Duration, Instant}; diff --git a/tokio/src/loom/std/mod.rs b/tokio/src/loom/std/mod.rs index 14e552a9aa5..6a9f54f9165 100644 --- a/tokio/src/loom/std/mod.rs +++ b/tokio/src/loom/std/mod.rs @@ -26,10 +26,13 @@ pub(crate) mod future { } pub(crate) mod hint { + use crate::alias::std; pub(crate) use std::hint::spin_loop; } pub(crate) mod rand { + use crate::alias::std; + use std::collections::hash_map::RandomState; use std::hash::{BuildHasher, Hash, Hasher}; use std::sync::atomic::AtomicU32; @@ -51,6 +54,8 @@ pub(crate) mod rand { } pub(crate) mod sync { + use crate::alias::std; + pub(crate) use std::sync::{Arc, Weak}; // Below, make sure all the feature-influenced types are exported for @@ -74,6 +79,8 @@ pub(crate) mod sync { pub(crate) use crate::loom::std::rwlock::RwLock; pub(crate) mod atomic { + use crate::alias::std; + pub(crate) use crate::loom::std::atomic_u16::AtomicU16; pub(crate) use crate::loom::std::atomic_u32::AtomicU32; pub(crate) use crate::loom::std::atomic_u64::{AtomicU64, StaticAtomicU64}; @@ -86,6 +93,8 @@ pub(crate) mod sync { } pub(crate) mod sys { + use crate::alias::std; + #[cfg(feature = "rt-multi-thread")] pub(crate) fn num_cpus() -> usize { use std::num::NonZeroUsize; @@ -116,6 +125,7 @@ pub(crate) mod sys { } pub(crate) mod thread { + use crate::alias::std; #[inline] pub(crate) fn yield_now() { std::hint::spin_loop(); diff --git a/tokio/src/loom/std/mutex.rs b/tokio/src/loom/std/mutex.rs index 9593ec487d1..5b101d1f24e 100644 --- a/tokio/src/loom/std/mutex.rs +++ b/tokio/src/loom/std/mutex.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::sync::{self, MutexGuard, TryLockError}; /// Adapter for `std::Mutex` that removes the poisoning aspects diff --git a/tokio/src/loom/std/parking_lot.rs b/tokio/src/loom/std/parking_lot.rs index 6a8375b0787..fe51c9468d8 100644 --- a/tokio/src/loom/std/parking_lot.rs +++ b/tokio/src/loom/std/parking_lot.rs @@ -3,6 +3,8 @@ //! //! This can be extended to additional types/methods as required. +use crate::alias::std; + use std::fmt; use std::marker::PhantomData; use std::ops::{Deref, DerefMut}; diff --git a/tokio/src/loom/std/rwlock.rs b/tokio/src/loom/std/rwlock.rs index 2b2c5f3fcde..9442dc850a6 100644 --- a/tokio/src/loom/std/rwlock.rs +++ b/tokio/src/loom/std/rwlock.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::sync::{self, RwLockReadGuard, RwLockWriteGuard, TryLockError}; /// Adapter for `std::sync::RwLock` that removes the poisoning aspects diff --git a/tokio/src/loom/std/unsafe_cell.rs b/tokio/src/loom/std/unsafe_cell.rs index 3d6513b4655..820f548cb1f 100644 --- a/tokio/src/loom/std/unsafe_cell.rs +++ b/tokio/src/loom/std/unsafe_cell.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + #[derive(Debug)] pub(crate) struct UnsafeCell(std::cell::UnsafeCell); diff --git a/tokio/src/macros/support.rs b/tokio/src/macros/support.rs index 8588f75c323..d9734b4568c 100644 --- a/tokio/src/macros/support.rs +++ b/tokio/src/macros/support.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + cfg_macros! { pub use crate::future::maybe_done::maybe_done; diff --git a/tokio/src/macros/thread_local.rs b/tokio/src/macros/thread_local.rs index 6d4a6aacbff..db23c355024 100644 --- a/tokio/src/macros/thread_local.rs +++ b/tokio/src/macros/thread_local.rs @@ -13,6 +13,6 @@ macro_rules! tokio_thread_local { #[cfg(not(all(loom, test)))] macro_rules! tokio_thread_local { ($($tts:tt)+) => { - ::std::thread_local!{ $($tts)+ } + crate::alias::std::thread_local!{ $($tts)+ } } } diff --git a/tokio/src/runtime/context.rs b/tokio/src/runtime/context.rs index 12f6edf1321..56b9d0798c8 100644 --- a/tokio/src/runtime/context.rs +++ b/tokio/src/runtime/context.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use crate::loom::thread::AccessError; use crate::runtime::coop; diff --git a/tokio/src/runtime/coop.rs b/tokio/src/runtime/coop.rs index c01e5e3de8b..53b036c9852 100644 --- a/tokio/src/runtime/coop.rs +++ b/tokio/src/runtime/coop.rs @@ -135,6 +135,8 @@ cfg_rt! { } cfg_coop! { + use crate::alias::std; + use pin_project_lite::pin_project; use std::cell::Cell; use std::future::Future; diff --git a/tokio/src/runtime/driver.rs b/tokio/src/runtime/driver.rs index 11aa7abb7b7..30dd5811c67 100644 --- a/tokio/src/runtime/driver.rs +++ b/tokio/src/runtime/driver.rs @@ -7,6 +7,8 @@ allow(dead_code) )] +use crate::alias::std; + use crate::runtime::park::{ParkThread, UnparkThread}; use std::io; diff --git a/tokio/src/runtime/park.rs b/tokio/src/runtime/park.rs index c5c8b1307d0..f37f91717fc 100644 --- a/tokio/src/runtime/park.rs +++ b/tokio/src/runtime/park.rs @@ -1,5 +1,7 @@ #![cfg_attr(not(feature = "full"), allow(dead_code))] +use crate::alias::std; + use crate::loom::sync::atomic::AtomicUsize; use crate::loom::sync::{Arc, Condvar, Mutex}; diff --git a/tokio/src/util/cacheline.rs b/tokio/src/util/cacheline.rs index b34004c1ac1..32996d2cb01 100644 --- a/tokio/src/util/cacheline.rs +++ b/tokio/src/util/cacheline.rs @@ -1,5 +1,6 @@ #![cfg_attr(not(feature = "sync"), allow(dead_code, unreachable_pub))] -use std::ops::{Deref, DerefMut}; + +use core::ops::{Deref, DerefMut}; /// Pads and aligns a value to the length of a cache line. #[derive(Clone, Copy, Default, Hash, PartialEq, Eq)] diff --git a/tokio/src/util/metric_atomics.rs b/tokio/src/util/metric_atomics.rs index afc1cd4c7f4..b12574ca402 100644 --- a/tokio/src/util/metric_atomics.rs +++ b/tokio/src/util/metric_atomics.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::sync::atomic::{AtomicUsize, Ordering}; cfg_64bit_metrics! { From 991d24f1869b62bc1656af797250d8aa14ceae20 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 00:00:25 -0500 Subject: [PATCH 03/19] portable-io option support - now working for io & io-util --- tokio/Cargo.toml | 4 +++- tokio/src/io/split.rs | 18 ++++++++++++++++++ tokio/src/io/util/async_write_ext.rs | 4 ++++ tokio/src/io/util/mem.rs | 6 ++++++ tokio/src/io/util/mod.rs | 2 ++ tokio/src/lib.rs | 21 +++++++++++++++++---- 6 files changed, 50 insertions(+), 5 deletions(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index 2ca4aea40e9..6e84de03923 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -47,7 +47,7 @@ full = [ # XXX TODO other features will likely require "std" to work fs = [] # XXX TBD io-util no-std WITH portable-io -io-util = ["std", "bytes"] +io-util = ["bytes"] # stdin, stdout, stderr io-std = ["std"] macros = ["tokio-macros"] @@ -63,6 +63,7 @@ net = [ "windows-sys/Win32_System_Pipes", "windows-sys/Win32_System_SystemServices", ] +portable-io = ["dep:portable-io"] process = [ "bytes", "libc", @@ -100,6 +101,7 @@ pin-project-lite = "0.2.11" bytes = { version = "1.1.0", optional = true } mio = { version = "1.0.1", optional = true, default-features = false } parking_lot = { version = "0.12.0", optional = true } +portable-io = { version = "0.0.4", optional = true } [target.'cfg(not(target_family = "wasm"))'.dependencies] socket2 = { version = "0.5.5", optional = true, features = ["all"] } diff --git a/tokio/src/io/split.rs b/tokio/src/io/split.rs index 479fda82756..1d3637100fd 100644 --- a/tokio/src/io/split.rs +++ b/tokio/src/io/split.rs @@ -11,6 +11,12 @@ use std::fmt; use std::io; use std::pin::Pin; use std::sync::Arc; +#[cfg(all( + feature = "parking_lot", + not(feature = "std"), +))] +use parking_lot::Mutex; +#[cfg(feature = "std")] use std::sync::Mutex; use std::task::{Context, Poll}; @@ -58,6 +64,12 @@ struct Inner { impl Inner { fn with_lock(&self, f: impl FnOnce(Pin<&mut T>) -> R) -> R { + #[cfg(all( + feature = "parking_lot", + not(feature = "std"), + ))] + let mut guard = self.stream.lock(); + #[cfg(feature = "std")] let mut guard = self.stream.lock().unwrap(); // safety: we do not move the stream. @@ -93,6 +105,12 @@ impl ReadHalf { .ok() .expect("`Arc::try_unwrap` failed"); + #[cfg(all( + feature = "parking_lot", + not(feature = "std"), + ))] + return inner.stream.into_inner(); + #[cfg(feature = "std")] inner.stream.into_inner().unwrap() } else { panic!("Unrelated `split::Write` passed to `split::Read::unsplit`.") diff --git a/tokio/src/io/util/async_write_ext.rs b/tokio/src/io/util/async_write_ext.rs index d178ecf2ee2..458db1fe5c0 100644 --- a/tokio/src/io/util/async_write_ext.rs +++ b/tokio/src/io/util/async_write_ext.rs @@ -3,6 +3,8 @@ use crate::io::util::flush::{flush, Flush}; use crate::io::util::shutdown::{shutdown, Shutdown}; use crate::io::util::write::{write, Write}; use crate::io::util::write_all::{write_all, WriteAll}; +// XXX TBD XXX XXX +#[cfg(not(feature = "portable-io"))] use crate::io::util::write_all_buf::{write_all_buf, WriteAllBuf}; use crate::io::util::write_buf::{write_buf, WriteBuf}; use crate::io::util::write_int::{WriteF32, WriteF32Le, WriteF64, WriteF64Le}; @@ -317,6 +319,8 @@ cfg_io_util! { /// ``` /// /// [`write`]: AsyncWriteExt::write + // XXX TBD XXX XXX + #[cfg(not(feature = "portable-io"))] fn write_all_buf<'a, B>(&'a mut self, src: &'a mut B) -> WriteAllBuf<'a, Self, B> where Self: Sized + Unpin, diff --git a/tokio/src/io/util/mem.rs b/tokio/src/io/util/mem.rs index 764dc43e7e7..c182c99a298 100644 --- a/tokio/src/io/util/mem.rs +++ b/tokio/src/io/util/mem.rs @@ -2,6 +2,12 @@ use crate::alias::std; use crate::io::{split, AsyncRead, AsyncWrite, ReadBuf, ReadHalf, WriteHalf}; +#[cfg(all( + feature = "parking_lot", + not(feature = "std"), +))] +use parking_lot::Mutex; +#[cfg(feature = "std")] use crate::loom::sync::Mutex; use bytes::{Buf, BytesMut}; diff --git a/tokio/src/io/util/mod.rs b/tokio/src/io/util/mod.rs index 9e00e1276f8..b4263cd4670 100644 --- a/tokio/src/io/util/mod.rs +++ b/tokio/src/io/util/mod.rs @@ -80,6 +80,8 @@ cfg_io_util! { mod write_vectored; mod write_all; mod write_buf; + // XXX TBD XXX XXX + #[cfg(not(feature = "portable-io"))] mod write_all_buf; mod write_int; diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index c5c37a4b683..bbf832ab410 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -507,9 +507,15 @@ cfg_fs! { mod future; -// XXX TODO SUPPORT no-std with portable-io -#[cfg(feature = "std")] -#[cfg_attr(docsrs, doc(cfg(feature = "std")))] +// XXX TBD XXX XXX +#[cfg(any( + feature = "std", + feature = "portable-io", +))] +#[cfg_attr(docsrs, doc(cfg(any( + feature = "std", + feature = "portable-io", +))))] pub mod io; cfg_net! { @@ -674,11 +680,18 @@ pub(crate) mod alias { extern crate alloc; pub(crate) use alloc::{boxed, rc, str, string, vec}; + #[cfg(feature = "portable-io")] + pub(crate) use portable_io as io; + #[cfg(feature = "std")] extern crate std; - #[cfg(feature = "std")] + #[cfg(all( + feature = "std", + not(feature = "portable-io"), + ))] pub(crate) use std::io; + #[cfg(feature = "std")] pub(crate) use std::{collections, env, hash, os, panic, thread, thread_local}; From 494e009ae9c090f6c37f27eddf634fd89923598d Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 00:27:58 -0500 Subject: [PATCH 04/19] FIXUP for fs option --- tokio/Cargo.toml | 3 +-- tokio/src/fs/canonicalize.rs | 1 + tokio/src/fs/copy.rs | 1 + tokio/src/fs/create_dir.rs | 1 + tokio/src/fs/create_dir_all.rs | 1 + tokio/src/fs/dir_builder.rs | 1 + tokio/src/fs/file.rs | 1 + tokio/src/fs/hard_link.rs | 1 + tokio/src/fs/metadata.rs | 1 + tokio/src/fs/mod.rs | 2 +- tokio/src/fs/open_options.rs | 1 + tokio/src/fs/read.rs | 2 ++ tokio/src/fs/read_dir.rs | 1 + tokio/src/fs/read_link.rs | 1 + tokio/src/fs/read_to_string.rs | 1 + tokio/src/fs/remove_dir.rs | 1 + tokio/src/fs/remove_dir_all.rs | 1 + tokio/src/fs/remove_file.rs | 1 + tokio/src/fs/rename.rs | 1 + tokio/src/fs/set_permissions.rs | 1 + tokio/src/fs/symlink.rs | 1 + tokio/src/fs/symlink_metadata.rs | 1 + tokio/src/fs/try_exists.rs | 1 + tokio/src/fs/write.rs | 1 + tokio/src/lib.rs | 7 ++++--- tokio/src/macros/addr_of.rs | 2 +- tokio/src/sync/batch_semaphore.rs | 1 + tokio/src/sync/mutex.rs | 1 + tokio/src/util/wake_list.rs | 2 +- 29 files changed, 33 insertions(+), 8 deletions(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index 6e84de03923..8ac329143cf 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -44,8 +44,7 @@ full = [ "time", ] -# XXX TODO other features will likely require "std" to work -fs = [] +fs = ["std"] # XXX TBD io-util no-std WITH portable-io io-util = ["bytes"] # stdin, stdout, stderr diff --git a/tokio/src/fs/canonicalize.rs b/tokio/src/fs/canonicalize.rs index 42bc9d1d55d..bfc2e0dc572 100644 --- a/tokio/src/fs/canonicalize.rs +++ b/tokio/src/fs/canonicalize.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/copy.rs b/tokio/src/fs/copy.rs index c686e5fdd7b..80fc04b4c12 100644 --- a/tokio/src/fs/copy.rs +++ b/tokio/src/fs/copy.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::path::Path; diff --git a/tokio/src/fs/create_dir.rs b/tokio/src/fs/create_dir.rs index dbc97eb6033..be9146f9a7f 100644 --- a/tokio/src/fs/create_dir.rs +++ b/tokio/src/fs/create_dir.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/create_dir_all.rs b/tokio/src/fs/create_dir_all.rs index 0a85b6a0c7f..60b9702ca28 100644 --- a/tokio/src/fs/create_dir_all.rs +++ b/tokio/src/fs/create_dir_all.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/dir_builder.rs b/tokio/src/fs/dir_builder.rs index 3d822008f3e..ae56c7a7d3d 100644 --- a/tokio/src/fs/dir_builder.rs +++ b/tokio/src/fs/dir_builder.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/file.rs b/tokio/src/fs/file.rs index 7847066404d..fc621dcc41c 100644 --- a/tokio/src/fs/file.rs +++ b/tokio/src/fs/file.rs @@ -2,6 +2,7 @@ //! //! [`File`]: File +use crate::alias::std::{self, prelude::*}; use crate::fs::{asyncify, OpenOptions}; use crate::io::blocking::{Buf, DEFAULT_MAX_BUF_SIZE}; use crate::io::{AsyncRead, AsyncSeek, AsyncWrite, ReadBuf}; diff --git a/tokio/src/fs/hard_link.rs b/tokio/src/fs/hard_link.rs index 7f4e1c5fd90..7b7d4cd7194 100644 --- a/tokio/src/fs/hard_link.rs +++ b/tokio/src/fs/hard_link.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/metadata.rs b/tokio/src/fs/metadata.rs index 21ebe4f786b..0f8c796e8ab 100644 --- a/tokio/src/fs/metadata.rs +++ b/tokio/src/fs/metadata.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::fs::Metadata; diff --git a/tokio/src/fs/mod.rs b/tokio/src/fs/mod.rs index c1855c42aeb..d4105bb3702 100644 --- a/tokio/src/fs/mod.rs +++ b/tokio/src/fs/mod.rs @@ -295,7 +295,7 @@ cfg_windows! { pub use self::symlink_file::symlink_file; } -use std::io; +use crate::alias::std::io; #[cfg(not(test))] use crate::blocking::spawn_blocking; diff --git a/tokio/src/fs/open_options.rs b/tokio/src/fs/open_options.rs index e70e6aa0b6f..e09e30963f3 100644 --- a/tokio/src/fs/open_options.rs +++ b/tokio/src/fs/open_options.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::{asyncify, File}; use std::io; diff --git a/tokio/src/fs/read.rs b/tokio/src/fs/read.rs index 36edf2a5b1e..8da3660af9c 100644 --- a/tokio/src/fs/read.rs +++ b/tokio/src/fs/read.rs @@ -1,5 +1,7 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; +// XXX XXX portable io / fs - XXX use std::{io, path::Path}; /// Reads the entire contents of a file into a bytes vector. diff --git a/tokio/src/fs/read_dir.rs b/tokio/src/fs/read_dir.rs index 2e7288adb34..50a7b2e2b6c 100644 --- a/tokio/src/fs/read_dir.rs +++ b/tokio/src/fs/read_dir.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::collections::VecDeque; diff --git a/tokio/src/fs/read_link.rs b/tokio/src/fs/read_link.rs index f3d5e99f944..b426e5636fe 100644 --- a/tokio/src/fs/read_link.rs +++ b/tokio/src/fs/read_link.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/read_to_string.rs b/tokio/src/fs/read_to_string.rs index 26228d98c29..9fb09bfae79 100644 --- a/tokio/src/fs/read_to_string.rs +++ b/tokio/src/fs/read_to_string.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::{io, path::Path}; diff --git a/tokio/src/fs/remove_dir.rs b/tokio/src/fs/remove_dir.rs index 5407af0dde1..9b2de1c30b8 100644 --- a/tokio/src/fs/remove_dir.rs +++ b/tokio/src/fs/remove_dir.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/remove_dir_all.rs b/tokio/src/fs/remove_dir_all.rs index 0a237550f9c..ae5fbebd952 100644 --- a/tokio/src/fs/remove_dir_all.rs +++ b/tokio/src/fs/remove_dir_all.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/remove_file.rs b/tokio/src/fs/remove_file.rs index 4018802547e..4c46253e7aa 100644 --- a/tokio/src/fs/remove_file.rs +++ b/tokio/src/fs/remove_file.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/rename.rs b/tokio/src/fs/rename.rs index 41647dafc7a..1c664b7872a 100644 --- a/tokio/src/fs/rename.rs +++ b/tokio/src/fs/rename.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/set_permissions.rs b/tokio/src/fs/set_permissions.rs index 09be02ea013..87f1c8a45c6 100644 --- a/tokio/src/fs/set_permissions.rs +++ b/tokio/src/fs/set_permissions.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::fs::Permissions; diff --git a/tokio/src/fs/symlink.rs b/tokio/src/fs/symlink.rs index 246e17e2662..e3ae7e547f4 100644 --- a/tokio/src/fs/symlink.rs +++ b/tokio/src/fs/symlink.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/symlink_metadata.rs b/tokio/src/fs/symlink_metadata.rs index 1d0df125760..380c1aad36a 100644 --- a/tokio/src/fs/symlink_metadata.rs +++ b/tokio/src/fs/symlink_metadata.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::fs::Metadata; diff --git a/tokio/src/fs/try_exists.rs b/tokio/src/fs/try_exists.rs index 2e8de04e0c5..e48873fc76d 100644 --- a/tokio/src/fs/try_exists.rs +++ b/tokio/src/fs/try_exists.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::io; diff --git a/tokio/src/fs/write.rs b/tokio/src/fs/write.rs index 28606fb3636..be24de6d281 100644 --- a/tokio/src/fs/write.rs +++ b/tokio/src/fs/write.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; use std::{io, path::Path}; diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index bbf832ab410..4171d3d0588 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -669,16 +669,17 @@ pub(crate) use alias::std::os; pub(crate) mod alias { pub(crate) mod std { pub(crate) mod prelude { + pub(crate) use super::borrow::ToOwned; pub(crate) use super::boxed::Box; pub(crate) use super::string::String; pub(crate) use super::vec; pub(crate) use super::vec::Vec; } - pub(crate) use core::{cell, convert, cmp, fmt, future, hint, marker, mem, num, ops, pin, slice, task}; + pub(crate) use core::{cell, convert, cmp, fmt, future, hint, marker, mem, num, ops, pin, ptr, slice, task}; extern crate alloc; - pub(crate) use alloc::{boxed, rc, str, string, vec}; + pub(crate) use alloc::{borrow, boxed, rc, str, string, vec}; #[cfg(feature = "portable-io")] pub(crate) use portable_io as io; @@ -693,7 +694,7 @@ pub(crate) mod alias { pub(crate) use std::io; #[cfg(feature = "std")] - pub(crate) use std::{collections, env, hash, os, panic, thread, thread_local}; + pub(crate) use std::{collections, env, error, ffi, fs, hash, os, panic, path, thread, thread_local}; pub(crate) mod sync { extern crate alloc; diff --git a/tokio/src/macros/addr_of.rs b/tokio/src/macros/addr_of.rs index 9d28158f200..b380d02fb55 100644 --- a/tokio/src/macros/addr_of.rs +++ b/tokio/src/macros/addr_of.rs @@ -14,7 +14,7 @@ macro_rules! generate_addr_of_methods { $(#[$attrs])* $vis unsafe fn $fn_name(me: ::core::ptr::NonNull) -> ::core::ptr::NonNull<$field_type> { let me = me.as_ptr(); - let field = ::std::ptr::addr_of_mut!((*me) $(.$field_name)+ ); + let field = ::core::ptr::addr_of_mut!((*me) $(.$field_name)+ ); ::core::ptr::NonNull::new_unchecked(field) } )*} diff --git a/tokio/src/sync/batch_semaphore.rs b/tokio/src/sync/batch_semaphore.rs index aabee0f5c0e..0e797b2a178 100644 --- a/tokio/src/sync/batch_semaphore.rs +++ b/tokio/src/sync/batch_semaphore.rs @@ -15,6 +15,7 @@ //! tasks are acquiring smaller numbers of permits. This means that in a //! use-case like tokio's read-write lock, writers will not be starved by //! readers. +use crate::alias::std; use crate::loom::cell::UnsafeCell; use crate::loom::sync::atomic::AtomicUsize; use crate::loom::sync::{Mutex, MutexGuard}; diff --git a/tokio/src/sync/mutex.rs b/tokio/src/sync/mutex.rs index 30f0bdecedb..a433f04ed7e 100644 --- a/tokio/src/sync/mutex.rs +++ b/tokio/src/sync/mutex.rs @@ -1,5 +1,6 @@ #![cfg_attr(not(feature = "sync"), allow(unreachable_pub, dead_code))] +use crate::alias::std; use crate::sync::batch_semaphore as semaphore; #[cfg(all(tokio_unstable, feature = "tracing"))] use crate::util::trace; diff --git a/tokio/src/util/wake_list.rs b/tokio/src/util/wake_list.rs index 23a559d02be..70b506f2508 100644 --- a/tokio/src/util/wake_list.rs +++ b/tokio/src/util/wake_list.rs @@ -1,6 +1,6 @@ use core::mem::MaybeUninit; use core::ptr; -use std::task::Waker; +use crate::alias::std::task::Waker; const NUM_WAKERS: usize = 32; From 871969d7981abbb4fbd2b6491a5667ed283b2452 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 00:29:02 -0500 Subject: [PATCH 05/19] FIXUP for macros feature --- tokio/Cargo.toml | 2 +- tokio/src/future/maybe_done.rs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index 8ac329143cf..15bb88ac1a6 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -49,7 +49,7 @@ fs = ["std"] io-util = ["bytes"] # stdin, stdout, stderr io-std = ["std"] -macros = ["tokio-macros"] +macros = ["std", "tokio-macros"] net = [ "libc", "mio/os-poll", diff --git a/tokio/src/future/maybe_done.rs b/tokio/src/future/maybe_done.rs index ed2136526fc..d4c054d1a50 100644 --- a/tokio/src/future/maybe_done.rs +++ b/tokio/src/future/maybe_done.rs @@ -1,5 +1,7 @@ //! Definition of the [`MaybeDone`] combinator. +use crate::alias::std; + use pin_project_lite::pin_project; use std::future::{Future, IntoFuture}; use std::pin::Pin; From 77c1d1d5c6b6bbc31e3ed47cb22b408b80d7bd49 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 01:06:16 -0500 Subject: [PATCH 06/19] FIXUP for rt feature --- tokio/Cargo.toml | 2 +- tokio/src/future/mod.rs | 2 +- tokio/src/lib.rs | 4 ++-- tokio/src/runtime/blocking/pool.rs | 1 + tokio/src/runtime/blocking/shutdown.rs | 1 + tokio/src/runtime/blocking/task.rs | 2 ++ tokio/src/runtime/builder.rs | 1 + tokio/src/runtime/context/blocking.rs | 1 + tokio/src/runtime/context/current.rs | 1 + tokio/src/runtime/context/runtime.rs | 1 + tokio/src/runtime/context/scoped.rs | 2 ++ tokio/src/runtime/handle.rs | 1 + tokio/src/runtime/metrics/mock.rs | 2 ++ tokio/src/runtime/mod.rs | 2 ++ tokio/src/runtime/runtime.rs | 2 ++ tokio/src/runtime/scheduler/current_thread/mod.rs | 1 + tokio/src/runtime/scheduler/defer.rs | 2 ++ tokio/src/runtime/scheduler/inject/pop.rs | 1 + tokio/src/runtime/scheduler/inject/shared.rs | 1 + tokio/src/runtime/scheduler/mod.rs | 1 + tokio/src/runtime/task/abort.rs | 2 ++ tokio/src/runtime/task/core.rs | 1 + tokio/src/runtime/task/error.rs | 2 ++ tokio/src/runtime/task/harness.rs | 1 + tokio/src/runtime/task/id.rs | 1 + tokio/src/runtime/task/join.rs | 1 + tokio/src/runtime/task/list.rs | 1 + tokio/src/runtime/task/mod.rs | 1 + tokio/src/runtime/task/raw.rs | 1 + tokio/src/runtime/task/state.rs | 1 + tokio/src/runtime/task/waker.rs | 1 + tokio/src/runtime/task_hooks.rs | 2 ++ tokio/src/runtime/thread_id.rs | 2 ++ tokio/src/sync/notify.rs | 1 + tokio/src/sync/oneshot.rs | 3 +++ tokio/src/sync/task/atomic_waker.rs | 1 + tokio/src/task/consume_budget.rs | 2 ++ tokio/src/task/join_set.rs | 3 +++ tokio/src/task/local.rs | 2 ++ tokio/src/task/spawn.rs | 1 + tokio/src/task/task_local.rs | 3 +++ tokio/src/task/unconstrained.rs | 3 +++ tokio/src/task/yield_now.rs | 1 + tokio/src/util/atomic_cell.rs | 1 + tokio/src/util/idle_notified_set.rs | 2 ++ tokio/src/util/once_cell.rs | 3 +++ tokio/src/util/rand/rt.rs | 2 ++ tokio/src/util/rc_cell.rs | 1 + tokio/src/util/sharded_list.rs | 1 + tokio/src/util/sync_wrapper.rs | 2 ++ tokio/src/util/trace.rs | 2 ++ tokio/src/util/wake.rs | 1 + 52 files changed, 79 insertions(+), 4 deletions(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index 15bb88ac1a6..77868f4514e 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -75,7 +75,7 @@ process = [ "windows-sys/Win32_System_WindowsProgramming", ] # Includes basic task execution capabilities -rt = [] +rt = ["std"] rt-multi-thread = ["rt"] signal = [ "libc", diff --git a/tokio/src/future/mod.rs b/tokio/src/future/mod.rs index 3cf23642dc0..e94dc1a9eda 100644 --- a/tokio/src/future/mod.rs +++ b/tokio/src/future/mod.rs @@ -23,6 +23,6 @@ cfg_trace! { cfg_not_trace! { cfg_rt! { - pub(crate) use std::future::Future; + pub(crate) use crate::alias::std::future::Future; } } diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index 4171d3d0588..1040c137b45 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -676,7 +676,7 @@ pub(crate) mod alias { pub(crate) use super::vec::Vec; } - pub(crate) use core::{cell, convert, cmp, fmt, future, hint, marker, mem, num, ops, pin, ptr, slice, task}; + pub(crate) use core::{any, cell, convert, cmp, fmt, future, hint, iter, marker, mem, num, ops, pin, ptr, slice, task}; extern crate alloc; pub(crate) use alloc::{borrow, boxed, rc, str, string, vec}; @@ -694,7 +694,7 @@ pub(crate) mod alias { pub(crate) use std::io; #[cfg(feature = "std")] - pub(crate) use std::{collections, env, error, ffi, fs, hash, os, panic, path, thread, thread_local}; + pub(crate) use std::{collections, env, error, ffi, fs, hash, os, panic, path, process, result, thread, thread_local}; pub(crate) mod sync { extern crate alloc; diff --git a/tokio/src/runtime/blocking/pool.rs b/tokio/src/runtime/blocking/pool.rs index a5f09d936dd..695e368c9d8 100644 --- a/tokio/src/runtime/blocking/pool.rs +++ b/tokio/src/runtime/blocking/pool.rs @@ -1,5 +1,6 @@ //! Thread pool for blocking operations +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::{Arc, Condvar, Mutex}; use crate::loom::thread; use crate::runtime::blocking::schedule::BlockingSchedule; diff --git a/tokio/src/runtime/blocking/shutdown.rs b/tokio/src/runtime/blocking/shutdown.rs index fe5abae076d..74f47926a7c 100644 --- a/tokio/src/runtime/blocking/shutdown.rs +++ b/tokio/src/runtime/blocking/shutdown.rs @@ -3,6 +3,7 @@ //! Each worker holds the `Sender` half. When all the `Sender` halves are //! dropped, the `Receiver` receives a notification. +use crate::alias::std; use crate::loom::sync::Arc; use crate::sync::oneshot; diff --git a/tokio/src/runtime/blocking/task.rs b/tokio/src/runtime/blocking/task.rs index c4461754005..58ff5ecca83 100644 --- a/tokio/src/runtime/blocking/task.rs +++ b/tokio/src/runtime/blocking/task.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; diff --git a/tokio/src/runtime/builder.rs b/tokio/src/runtime/builder.rs index c9a47c3862c..5db3ce1c930 100644 --- a/tokio/src/runtime/builder.rs +++ b/tokio/src/runtime/builder.rs @@ -1,5 +1,6 @@ #![cfg_attr(loom, allow(unused_imports))] +use crate::alias::std::{self, prelude::*}; use crate::runtime::handle::Handle; use crate::runtime::{blocking, driver, Callback, HistogramBuilder, Runtime, TaskCallback}; #[cfg(tokio_unstable)] diff --git a/tokio/src/runtime/context/blocking.rs b/tokio/src/runtime/context/blocking.rs index 39e14937ef7..a1aba12c190 100644 --- a/tokio/src/runtime/context/blocking.rs +++ b/tokio/src/runtime/context/blocking.rs @@ -1,5 +1,6 @@ use super::{EnterRuntime, CONTEXT}; +use crate::alias::std; use crate::loom::thread::AccessError; use crate::util::markers::NotSendOrSync; diff --git a/tokio/src/runtime/context/current.rs b/tokio/src/runtime/context/current.rs index d864711175b..42073c18d99 100644 --- a/tokio/src/runtime/context/current.rs +++ b/tokio/src/runtime/context/current.rs @@ -1,5 +1,6 @@ use super::{Context, CONTEXT}; +use crate::alias::std; use crate::runtime::{scheduler, TryCurrentError}; use crate::util::markers::SyncNotSend; diff --git a/tokio/src/runtime/context/runtime.rs b/tokio/src/runtime/context/runtime.rs index f2e29899a44..3534ec07f98 100644 --- a/tokio/src/runtime/context/runtime.rs +++ b/tokio/src/runtime/context/runtime.rs @@ -1,5 +1,6 @@ use super::{BlockingRegionGuard, SetCurrentGuard, CONTEXT}; +use crate::alias::std; use crate::runtime::scheduler; use crate::util::rand::{FastRand, RngSeed}; diff --git a/tokio/src/runtime/context/scoped.rs b/tokio/src/runtime/context/scoped.rs index 7b202a16c07..f2de341f0cc 100644 --- a/tokio/src/runtime/context/scoped.rs +++ b/tokio/src/runtime/context/scoped.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::cell::Cell; use std::ptr; diff --git a/tokio/src/runtime/handle.rs b/tokio/src/runtime/handle.rs index 752640d75bd..73d572e1789 100644 --- a/tokio/src/runtime/handle.rs +++ b/tokio/src/runtime/handle.rs @@ -15,6 +15,7 @@ pub struct Handle { pub(crate) inner: scheduler::Handle, } +use crate::alias::std::{self, prelude::*}; use crate::runtime::task::JoinHandle; use crate::runtime::BOX_FUTURE_THRESHOLD; use crate::util::error::{CONTEXT_MISSING_ERROR, THREAD_LOCAL_DESTROYED_ERROR}; diff --git a/tokio/src/runtime/metrics/mock.rs b/tokio/src/runtime/metrics/mock.rs index 777c13d8a83..880493d0383 100644 --- a/tokio/src/runtime/metrics/mock.rs +++ b/tokio/src/runtime/metrics/mock.rs @@ -1,5 +1,7 @@ //! This file contains mocks of the types in src/runtime/metrics +use crate::alias::std; + use std::thread::ThreadId; pub(crate) struct SchedulerMetrics {} diff --git a/tokio/src/runtime/mod.rs b/tokio/src/runtime/mod.rs index bc00bc0810d..33aec1c4632 100644 --- a/tokio/src/runtime/mod.rs +++ b/tokio/src/runtime/mod.rs @@ -319,6 +319,8 @@ #[macro_use] mod tests; +use crate::alias::std; + pub(crate) mod context; pub(crate) mod coop; diff --git a/tokio/src/runtime/runtime.rs b/tokio/src/runtime/runtime.rs index ea6bb247941..ad5d5af8a64 100644 --- a/tokio/src/runtime/runtime.rs +++ b/tokio/src/runtime/runtime.rs @@ -1,4 +1,6 @@ use super::BOX_FUTURE_THRESHOLD; + +use crate::alias::std::{self, prelude::*}; use crate::runtime::blocking::BlockingPool; use crate::runtime::scheduler::CurrentThread; use crate::runtime::{context, EnterGuard, Handle}; diff --git a/tokio/src/runtime/scheduler/current_thread/mod.rs b/tokio/src/runtime/scheduler/current_thread/mod.rs index c66635e7bd6..7d3e0c6b607 100644 --- a/tokio/src/runtime/scheduler/current_thread/mod.rs +++ b/tokio/src/runtime/scheduler/current_thread/mod.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::atomic::AtomicBool; use crate::loom::sync::Arc; use crate::runtime::driver::{self, Driver}; diff --git a/tokio/src/runtime/scheduler/defer.rs b/tokio/src/runtime/scheduler/defer.rs index e7a5dde74ca..9bc9c8b2226 100644 --- a/tokio/src/runtime/scheduler/defer.rs +++ b/tokio/src/runtime/scheduler/defer.rs @@ -1,3 +1,5 @@ +use crate::alias::std::{self, prelude::*}; + use std::cell::RefCell; use std::task::Waker; diff --git a/tokio/src/runtime/scheduler/inject/pop.rs b/tokio/src/runtime/scheduler/inject/pop.rs index 4e6d5d3be3a..c337f66d6e7 100644 --- a/tokio/src/runtime/scheduler/inject/pop.rs +++ b/tokio/src/runtime/scheduler/inject/pop.rs @@ -1,5 +1,6 @@ use super::Synced; +use crate::alias::std; use crate::runtime::task; use std::marker::PhantomData; diff --git a/tokio/src/runtime/scheduler/inject/shared.rs b/tokio/src/runtime/scheduler/inject/shared.rs index e32c2e4d719..e6dd4c33ab8 100644 --- a/tokio/src/runtime/scheduler/inject/shared.rs +++ b/tokio/src/runtime/scheduler/inject/shared.rs @@ -1,5 +1,6 @@ use super::{Pop, Synced}; +use crate::alias::std; use crate::loom::sync::atomic::AtomicUsize; use crate::runtime::task; diff --git a/tokio/src/runtime/scheduler/mod.rs b/tokio/src/runtime/scheduler/mod.rs index e0a1b20b5bc..eb279e91677 100644 --- a/tokio/src/runtime/scheduler/mod.rs +++ b/tokio/src/runtime/scheduler/mod.rs @@ -78,6 +78,7 @@ impl Handle { } cfg_rt! { + use crate::alias::std; use crate::future::Future; use crate::loom::sync::Arc; use crate::runtime::{blocking, task::Id}; diff --git a/tokio/src/runtime/task/abort.rs b/tokio/src/runtime/task/abort.rs index 507973eb4ff..fdaef2d8871 100644 --- a/tokio/src/runtime/task/abort.rs +++ b/tokio/src/runtime/task/abort.rs @@ -1,4 +1,6 @@ +use crate::alias::std; use crate::runtime::task::{Header, RawTask}; + use std::fmt; use std::panic::{RefUnwindSafe, UnwindSafe}; diff --git a/tokio/src/runtime/task/core.rs b/tokio/src/runtime/task/core.rs index 5d3ca0e00c9..537cac1baea 100644 --- a/tokio/src/runtime/task/core.rs +++ b/tokio/src/runtime/task/core.rs @@ -9,6 +9,7 @@ //! Make sure to consult the relevant safety section of each function before //! use. +use crate::alias::std::{self, prelude::*}; use crate::future::Future; use crate::loom::cell::UnsafeCell; use crate::runtime::context; diff --git a/tokio/src/runtime/task/error.rs b/tokio/src/runtime/task/error.rs index b3bd819511e..b56af8a4690 100644 --- a/tokio/src/runtime/task/error.rs +++ b/tokio/src/runtime/task/error.rs @@ -1,3 +1,5 @@ +use crate::alias::std::{self, prelude::*}; + use std::any::Any; use std::fmt; use std::io; diff --git a/tokio/src/runtime/task/harness.rs b/tokio/src/runtime/task/harness.rs index 9bf73b74fbf..9bd2eb1d120 100644 --- a/tokio/src/runtime/task/harness.rs +++ b/tokio/src/runtime/task/harness.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::future::Future; use crate::runtime::task::core::{Cell, Core, Header, Trailer}; use crate::runtime::task::state::{Snapshot, State}; diff --git a/tokio/src/runtime/task/id.rs b/tokio/src/runtime/task/id.rs index 63d01700bfd..14b11f8b2e2 100644 --- a/tokio/src/runtime/task/id.rs +++ b/tokio/src/runtime/task/id.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::runtime::context; use std::{fmt, num::NonZeroU64}; diff --git a/tokio/src/runtime/task/join.rs b/tokio/src/runtime/task/join.rs index 086637a582d..9acdd659531 100644 --- a/tokio/src/runtime/task/join.rs +++ b/tokio/src/runtime/task/join.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::runtime::task::{Header, RawTask}; use std::fmt; diff --git a/tokio/src/runtime/task/list.rs b/tokio/src/runtime/task/list.rs index 54bfc01aafb..db792b8f242 100644 --- a/tokio/src/runtime/task/list.rs +++ b/tokio/src/runtime/task/list.rs @@ -6,6 +6,7 @@ //! The collections can be closed to prevent adding new tasks during shutdown of //! the scheduler with the collection. +use crate::alias::std; use crate::future::Future; use crate::loom::cell::UnsafeCell; use crate::runtime::task::{JoinHandle, LocalNotified, Notified, Schedule, Task}; diff --git a/tokio/src/runtime/task/mod.rs b/tokio/src/runtime/task/mod.rs index 15c5a8f4afe..c5877dede79 100644 --- a/tokio/src/runtime/task/mod.rs +++ b/tokio/src/runtime/task/mod.rs @@ -220,6 +220,7 @@ cfg_taskdump! { pub(crate) mod trace; } +use crate::alias::std; use crate::future::Future; use crate::util::linked_list; use crate::util::sharded_list; diff --git a/tokio/src/runtime/task/raw.rs b/tokio/src/runtime/task/raw.rs index 6699551f3ec..18c47324b7a 100644 --- a/tokio/src/runtime/task/raw.rs +++ b/tokio/src/runtime/task/raw.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::future::Future; use crate::runtime::task::core::{Core, Trailer}; use crate::runtime::task::{Cell, Harness, Header, Id, Schedule, State}; diff --git a/tokio/src/runtime/task/state.rs b/tokio/src/runtime/task/state.rs index da3e8d38d91..d86034856a4 100644 --- a/tokio/src/runtime/task/state.rs +++ b/tokio/src/runtime/task/state.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::loom::sync::atomic::AtomicUsize; use std::fmt; diff --git a/tokio/src/runtime/task/waker.rs b/tokio/src/runtime/task/waker.rs index 2a1568fe8f7..8290f46568f 100644 --- a/tokio/src/runtime/task/waker.rs +++ b/tokio/src/runtime/task/waker.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::runtime::task::{Header, RawTask, Schedule}; use std::marker::PhantomData; diff --git a/tokio/src/runtime/task_hooks.rs b/tokio/src/runtime/task_hooks.rs index 2c884af74be..5906326a6b1 100644 --- a/tokio/src/runtime/task_hooks.rs +++ b/tokio/src/runtime/task_hooks.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::marker::PhantomData; impl TaskHooks { diff --git a/tokio/src/runtime/thread_id.rs b/tokio/src/runtime/thread_id.rs index ef392897963..ed7cf73beb4 100644 --- a/tokio/src/runtime/thread_id.rs +++ b/tokio/src/runtime/thread_id.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::num::NonZeroU64; #[derive(Eq, PartialEq, Clone, Copy, Hash, Debug)] diff --git a/tokio/src/sync/notify.rs b/tokio/src/sync/notify.rs index 99c44295776..d444f9c83ad 100644 --- a/tokio/src/sync/notify.rs +++ b/tokio/src/sync/notify.rs @@ -5,6 +5,7 @@ // triggers this warning but it is safe to ignore in this case. #![cfg_attr(not(feature = "sync"), allow(unreachable_pub, dead_code))] +use crate::alias::std; use crate::loom::cell::UnsafeCell; use crate::loom::sync::atomic::AtomicUsize; use crate::loom::sync::Mutex; diff --git a/tokio/src/sync/oneshot.rs b/tokio/src/sync/oneshot.rs index 2b346eae81c..24bb047943a 100644 --- a/tokio/src/sync/oneshot.rs +++ b/tokio/src/sync/oneshot.rs @@ -123,6 +123,7 @@ //! } //! ``` +use crate::alias::std; use crate::loom::cell::UnsafeCell; use crate::loom::sync::atomic::AtomicUsize; use crate::loom::sync::Arc; @@ -332,6 +333,8 @@ pub struct Receiver { pub mod error { //! `Oneshot` error types. + use crate::alias::std; + use std::fmt; /// Error returned by the `Future` implementation for `Receiver`. diff --git a/tokio/src/sync/task/atomic_waker.rs b/tokio/src/sync/task/atomic_waker.rs index d064987389d..39827f672fb 100644 --- a/tokio/src/sync/task/atomic_waker.rs +++ b/tokio/src/sync/task/atomic_waker.rs @@ -1,5 +1,6 @@ #![cfg_attr(any(loom, not(feature = "sync")), allow(dead_code, unreachable_pub))] +use crate::alias::std; use crate::loom::cell::UnsafeCell; use crate::loom::hint; use crate::loom::sync::atomic::AtomicUsize; diff --git a/tokio/src/task/consume_budget.rs b/tokio/src/task/consume_budget.rs index 85ef1bfb2d2..705957c04a0 100644 --- a/tokio/src/task/consume_budget.rs +++ b/tokio/src/task/consume_budget.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::task::{ready, Poll}; /// Consumes a unit of budget and returns the execution back to the Tokio diff --git a/tokio/src/task/join_set.rs b/tokio/src/task/join_set.rs index ed2777ccf86..00ad48d9207 100644 --- a/tokio/src/task/join_set.rs +++ b/tokio/src/task/join_set.rs @@ -4,6 +4,9 @@ //! of spawned tasks and allows asynchronously awaiting the output of those //! tasks as they complete. See the documentation for the [`JoinSet`] type for //! details. + +use crate::alias::std::{self, prelude::*}; + use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; diff --git a/tokio/src/task/local.rs b/tokio/src/task/local.rs index edd02acbac0..9cca7f04ace 100644 --- a/tokio/src/task/local.rs +++ b/tokio/src/task/local.rs @@ -1,4 +1,6 @@ //! Runs `!Send` futures on the current thread. + +use crate::alias::std::{self, prelude::*}; use crate::loom::cell::UnsafeCell; use crate::loom::sync::{Arc, Mutex}; #[cfg(tokio_unstable)] diff --git a/tokio/src/task/spawn.rs b/tokio/src/task/spawn.rs index 7c748226121..39423a6c8ba 100644 --- a/tokio/src/task/spawn.rs +++ b/tokio/src/task/spawn.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::runtime::BOX_FUTURE_THRESHOLD; use crate::task::JoinHandle; use crate::util::trace::SpawnMeta; diff --git a/tokio/src/task/task_local.rs b/tokio/src/task/task_local.rs index cb9d22c61e7..43a4673952c 100644 --- a/tokio/src/task/task_local.rs +++ b/tokio/src/task/task_local.rs @@ -1,4 +1,7 @@ +use crate::alias::std; + use pin_project_lite::pin_project; + use std::cell::RefCell; use std::error::Error; use std::future::Future; diff --git a/tokio/src/task/unconstrained.rs b/tokio/src/task/unconstrained.rs index 40384c8709e..f767e2c76ef 100644 --- a/tokio/src/task/unconstrained.rs +++ b/tokio/src/task/unconstrained.rs @@ -1,4 +1,7 @@ +use crate::alias::std; + use pin_project_lite::pin_project; + use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; diff --git a/tokio/src/task/yield_now.rs b/tokio/src/task/yield_now.rs index 27c1479671f..73c3472d5a0 100644 --- a/tokio/src/task/yield_now.rs +++ b/tokio/src/task/yield_now.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::runtime::context; use std::future::Future; diff --git a/tokio/src/util/atomic_cell.rs b/tokio/src/util/atomic_cell.rs index 41e44a85070..3f1e767ccb4 100644 --- a/tokio/src/util/atomic_cell.rs +++ b/tokio/src/util/atomic_cell.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::atomic::AtomicPtr; use std::ptr; diff --git a/tokio/src/util/idle_notified_set.rs b/tokio/src/util/idle_notified_set.rs index 8fe13095a2c..b1655958b54 100644 --- a/tokio/src/util/idle_notified_set.rs +++ b/tokio/src/util/idle_notified_set.rs @@ -6,6 +6,8 @@ //! specified using the `T` parameter. It will usually be a `JoinHandle` or //! similar. +use crate::alias::std::{self, prelude::*}; + use std::marker::PhantomPinned; use std::mem::ManuallyDrop; use std::ptr::NonNull; diff --git a/tokio/src/util/once_cell.rs b/tokio/src/util/once_cell.rs index 71fc00758e1..2039bf48acd 100644 --- a/tokio/src/util/once_cell.rs +++ b/tokio/src/util/once_cell.rs @@ -1,4 +1,7 @@ #![allow(dead_code)] + +use crate::alias::std; + use std::cell::UnsafeCell; use std::mem::MaybeUninit; use std::sync::Once; diff --git a/tokio/src/util/rand/rt.rs b/tokio/src/util/rand/rt.rs index 6584ba4f215..bde7fb730bc 100644 --- a/tokio/src/util/rand/rt.rs +++ b/tokio/src/util/rand/rt.rs @@ -1,5 +1,7 @@ use super::{FastRand, RngSeed}; +use crate::alias::std; + use std::sync::Mutex; /// A deterministic generator for seeds (and other generators). diff --git a/tokio/src/util/rc_cell.rs b/tokio/src/util/rc_cell.rs index 44724926848..5b2d2252c8f 100644 --- a/tokio/src/util/rc_cell.rs +++ b/tokio/src/util/rc_cell.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::loom::cell::UnsafeCell; use std::rc::Rc; diff --git a/tokio/src/util/sharded_list.rs b/tokio/src/util/sharded_list.rs index 525cec9ea77..58976982453 100644 --- a/tokio/src/util/sharded_list.rs +++ b/tokio/src/util/sharded_list.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use std::ptr::NonNull; use std::sync::atomic::Ordering; diff --git a/tokio/src/util/sync_wrapper.rs b/tokio/src/util/sync_wrapper.rs index 62738e4d0a5..4d35b8cab9b 100644 --- a/tokio/src/util/sync_wrapper.rs +++ b/tokio/src/util/sync_wrapper.rs @@ -3,6 +3,8 @@ //! //! A similar primitive is provided in the `sync_wrapper` crate. +use crate::alias::std::{self, prelude::*}; + use std::any::Any; pub(crate) struct SyncWrapper { diff --git a/tokio/src/util/trace.rs b/tokio/src/util/trace.rs index b6eadba2205..fb2c83d5e3d 100644 --- a/tokio/src/util/trace.rs +++ b/tokio/src/util/trace.rs @@ -1,4 +1,6 @@ cfg_rt! { + use crate::alias::std; + use std::marker::PhantomData; #[derive(Copy, Clone)] diff --git a/tokio/src/util/wake.rs b/tokio/src/util/wake.rs index 896ec73e7b1..f8f1e8c0917 100644 --- a/tokio/src/util/wake.rs +++ b/tokio/src/util/wake.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::loom::sync::Arc; use std::marker::PhantomData; From 45bf50a97dc8ed4f1b8e29308578a77e7719cae9 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 09:36:52 -0500 Subject: [PATCH 07/19] FIXUP for sync feature --- tokio/Cargo.toml | 2 +- tokio/src/future/block_on.rs | 2 ++ tokio/src/lib.rs | 15 ++++++--------- tokio/src/sync/broadcast.rs | 3 +++ tokio/src/sync/mpsc/block.rs | 1 + tokio/src/sync/mpsc/bounded.rs | 1 + tokio/src/sync/mpsc/chan.rs | 1 + tokio/src/sync/mpsc/error.rs | 2 ++ tokio/src/sync/mpsc/list.rs | 1 + tokio/src/sync/mpsc/unbounded.rs | 1 + tokio/src/sync/once_cell.rs | 3 +++ tokio/src/sync/rwlock.rs | 2 ++ tokio/src/sync/rwlock/owned_read_guard.rs | 2 ++ tokio/src/sync/rwlock/owned_write_guard.rs | 2 ++ tokio/src/sync/rwlock/owned_write_guard_mapped.rs | 2 ++ tokio/src/sync/rwlock/read_guard.rs | 2 ++ tokio/src/sync/rwlock/write_guard.rs | 2 ++ tokio/src/sync/rwlock/write_guard_mapped.rs | 2 ++ tokio/src/sync/semaphore.rs | 3 +++ tokio/src/sync/watch.rs | 6 ++++++ 20 files changed, 45 insertions(+), 10 deletions(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index 77868f4514e..10edeeb3b58 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -87,7 +87,7 @@ signal = [ "windows-sys/Win32_System_Console", ] std = [] -sync = [] +sync = ["std"] test-util = ["rt", "sync", "time"] time = [] diff --git a/tokio/src/future/block_on.rs b/tokio/src/future/block_on.rs index 2c2ab373617..08d84ac910a 100644 --- a/tokio/src/future/block_on.rs +++ b/tokio/src/future/block_on.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::future::Future; cfg_rt! { diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index 1040c137b45..a4e17a79a60 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -666,6 +666,8 @@ pub(crate) use self::doc::os; #[allow(unused)] pub(crate) use alias::std::os; +extern crate alloc; + pub(crate) mod alias { pub(crate) mod std { pub(crate) mod prelude { @@ -678,8 +680,7 @@ pub(crate) mod alias { pub(crate) use core::{any, cell, convert, cmp, fmt, future, hint, iter, marker, mem, num, ops, pin, ptr, slice, task}; - extern crate alloc; - pub(crate) use alloc::{borrow, boxed, rc, str, string, vec}; + pub(crate) use crate::alloc::{borrow, boxed, rc, str, string, vec}; #[cfg(feature = "portable-io")] pub(crate) use portable_io as io; @@ -694,17 +695,13 @@ pub(crate) mod alias { pub(crate) use std::io; #[cfg(feature = "std")] - pub(crate) use std::{collections, env, error, ffi, fs, hash, os, panic, path, process, result, thread, thread_local}; + pub(crate) use std::{alloc, collections, env, error, ffi, fs, hash, os, panic, path, process, result, thread, thread_local}; pub(crate) mod sync { - extern crate alloc; - #[cfg(feature = "std")] - extern crate std; - pub(crate) use core::sync::atomic; - pub(crate) use alloc::sync::*; + pub(crate) use crate::alloc::sync::*; #[cfg(feature = "std")] - pub(crate) use std::sync::*; + pub(crate) use super::std::sync::*; } pub(crate) mod time { diff --git a/tokio/src/sync/broadcast.rs b/tokio/src/sync/broadcast.rs index e48925b497e..0d3740e429f 100644 --- a/tokio/src/sync/broadcast.rs +++ b/tokio/src/sync/broadcast.rs @@ -116,6 +116,7 @@ //! } //! ``` +use crate::alias::std::{self, prelude::*}; use crate::loom::cell::UnsafeCell; use crate::loom::sync::atomic::{AtomicBool, AtomicUsize}; use crate::loom::sync::{Arc, Mutex, MutexGuard, RwLock, RwLockReadGuard}; @@ -213,6 +214,8 @@ pub struct Receiver { pub mod error { //! Broadcast error types + use crate::alias::std; + use std::fmt; /// Error returned by the [`send`] function on a [`Sender`]. diff --git a/tokio/src/sync/mpsc/block.rs b/tokio/src/sync/mpsc/block.rs index 927c4566463..d8df0cbbc60 100644 --- a/tokio/src/sync/mpsc/block.rs +++ b/tokio/src/sync/mpsc/block.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::loom::cell::UnsafeCell; use crate::loom::sync::atomic::{AtomicPtr, AtomicUsize}; diff --git a/tokio/src/sync/mpsc/bounded.rs b/tokio/src/sync/mpsc/bounded.rs index 99a3f0d5c4e..5e614d06940 100644 --- a/tokio/src/sync/mpsc/bounded.rs +++ b/tokio/src/sync/mpsc/bounded.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::Arc; use crate::sync::batch_semaphore::{self as semaphore, TryAcquireError}; use crate::sync::mpsc::chan; diff --git a/tokio/src/sync/mpsc/chan.rs b/tokio/src/sync/mpsc/chan.rs index 1e6eaab1798..1883324063a 100644 --- a/tokio/src/sync/mpsc/chan.rs +++ b/tokio/src/sync/mpsc/chan.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::loom::cell::UnsafeCell; use crate::loom::future::AtomicWaker; use crate::loom::sync::atomic::AtomicUsize; diff --git a/tokio/src/sync/mpsc/error.rs b/tokio/src/sync/mpsc/error.rs index 9fef7fd9c03..061004554b6 100644 --- a/tokio/src/sync/mpsc/error.rs +++ b/tokio/src/sync/mpsc/error.rs @@ -1,5 +1,7 @@ //! Channel error types. +use crate::alias::std; + use std::error::Error; use std::fmt; diff --git a/tokio/src/sync/mpsc/list.rs b/tokio/src/sync/mpsc/list.rs index 90d9b828c8e..496e3da617c 100644 --- a/tokio/src/sync/mpsc/list.rs +++ b/tokio/src/sync/mpsc/list.rs @@ -1,5 +1,6 @@ //! A concurrent, lock-free, FIFO list. +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::atomic::{AtomicPtr, AtomicUsize}; use crate::loom::thread; use crate::sync::mpsc::block::{self, Block}; diff --git a/tokio/src/sync/mpsc/unbounded.rs b/tokio/src/sync/mpsc/unbounded.rs index a9232dc934c..10102657d19 100644 --- a/tokio/src/sync/mpsc/unbounded.rs +++ b/tokio/src/sync/mpsc/unbounded.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::{atomic::AtomicUsize, Arc}; use crate::sync::mpsc::chan; use crate::sync::mpsc::error::{SendError, TryRecvError}; diff --git a/tokio/src/sync/once_cell.rs b/tokio/src/sync/once_cell.rs index 1b723048dff..41b50dac36a 100644 --- a/tokio/src/sync/once_cell.rs +++ b/tokio/src/sync/once_cell.rs @@ -1,5 +1,8 @@ use super::{Semaphore, SemaphorePermit, TryAcquireError}; + +use crate::alias::std; use crate::loom::cell::UnsafeCell; + use std::error::Error; use std::fmt; use std::future::Future; diff --git a/tokio/src/sync/rwlock.rs b/tokio/src/sync/rwlock.rs index ff02c7971d6..f524a7c6064 100644 --- a/tokio/src/sync/rwlock.rs +++ b/tokio/src/sync/rwlock.rs @@ -1,7 +1,9 @@ +use crate::alias::std; use crate::sync::batch_semaphore::{Semaphore, TryAcquireError}; use crate::sync::mutex::TryLockError; #[cfg(all(tokio_unstable, feature = "tracing"))] use crate::util::trace; + use std::cell::UnsafeCell; use std::marker; use std::marker::PhantomData; diff --git a/tokio/src/sync/rwlock/owned_read_guard.rs b/tokio/src/sync/rwlock/owned_read_guard.rs index f50b2abcaf5..2a9ab5bf1b0 100644 --- a/tokio/src/sync/rwlock/owned_read_guard.rs +++ b/tokio/src/sync/rwlock/owned_read_guard.rs @@ -1,4 +1,6 @@ +use crate::alias::std; use crate::sync::rwlock::RwLock; + use std::marker::PhantomData; use std::sync::Arc; use std::{fmt, mem, ops, ptr}; diff --git a/tokio/src/sync/rwlock/owned_write_guard.rs b/tokio/src/sync/rwlock/owned_write_guard.rs index 11be26a9bad..ed5e268274d 100644 --- a/tokio/src/sync/rwlock/owned_write_guard.rs +++ b/tokio/src/sync/rwlock/owned_write_guard.rs @@ -1,6 +1,8 @@ +use crate::alias::std; use crate::sync::rwlock::owned_read_guard::OwnedRwLockReadGuard; use crate::sync::rwlock::owned_write_guard_mapped::OwnedRwLockMappedWriteGuard; use crate::sync::rwlock::RwLock; + use std::marker::PhantomData; use std::sync::Arc; use std::{fmt, mem, ops, ptr}; diff --git a/tokio/src/sync/rwlock/owned_write_guard_mapped.rs b/tokio/src/sync/rwlock/owned_write_guard_mapped.rs index e0699d09794..c3a53bc8daa 100644 --- a/tokio/src/sync/rwlock/owned_write_guard_mapped.rs +++ b/tokio/src/sync/rwlock/owned_write_guard_mapped.rs @@ -1,4 +1,6 @@ +use crate::alias::std; use crate::sync::rwlock::RwLock; + use std::marker::PhantomData; use std::sync::Arc; use std::{fmt, mem, ops, ptr}; diff --git a/tokio/src/sync/rwlock/read_guard.rs b/tokio/src/sync/rwlock/read_guard.rs index a04b59588d5..23bfb6a71cd 100644 --- a/tokio/src/sync/rwlock/read_guard.rs +++ b/tokio/src/sync/rwlock/read_guard.rs @@ -1,4 +1,6 @@ +use crate::alias::std; use crate::sync::batch_semaphore::Semaphore; + use std::marker::PhantomData; use std::{fmt, mem, ops}; diff --git a/tokio/src/sync/rwlock/write_guard.rs b/tokio/src/sync/rwlock/write_guard.rs index d405fc2b39f..f0a84146940 100644 --- a/tokio/src/sync/rwlock/write_guard.rs +++ b/tokio/src/sync/rwlock/write_guard.rs @@ -1,6 +1,8 @@ +use crate::alias::std; use crate::sync::batch_semaphore::Semaphore; use crate::sync::rwlock::read_guard::RwLockReadGuard; use crate::sync::rwlock::write_guard_mapped::RwLockMappedWriteGuard; + use std::marker::PhantomData; use std::{fmt, mem, ops}; diff --git a/tokio/src/sync/rwlock/write_guard_mapped.rs b/tokio/src/sync/rwlock/write_guard_mapped.rs index 7705189e70f..c126488a600 100644 --- a/tokio/src/sync/rwlock/write_guard_mapped.rs +++ b/tokio/src/sync/rwlock/write_guard_mapped.rs @@ -1,4 +1,6 @@ +use crate::alias::std; use crate::sync::batch_semaphore::Semaphore; + use std::marker::PhantomData; use std::{fmt, mem, ops}; diff --git a/tokio/src/sync/semaphore.rs b/tokio/src/sync/semaphore.rs index 97963afddc2..8e5ead1db4f 100644 --- a/tokio/src/sync/semaphore.rs +++ b/tokio/src/sync/semaphore.rs @@ -1,7 +1,10 @@ use super::batch_semaphore as ll; // low level implementation use super::{AcquireError, TryAcquireError}; + +use crate::alias::std; #[cfg(all(tokio_unstable, feature = "tracing"))] use crate::util::trace; + use std::sync::Arc; /// Counting semaphore performing asynchronous permit acquisition. diff --git a/tokio/src/sync/watch.rs b/tokio/src/sync/watch.rs index 0f3bafff889..e81cc2d8488 100644 --- a/tokio/src/sync/watch.rs +++ b/tokio/src/sync/watch.rs @@ -111,12 +111,15 @@ //! [`Sender::closed`]: crate::sync::watch::Sender::closed //! [`Sender::subscribe()`]: crate::sync::watch::Sender::subscribe +use crate::alias::std; + use crate::runtime::coop::cooperative; use crate::sync::notify::Notify; use crate::loom::sync::atomic::AtomicUsize; use crate::loom::sync::atomic::Ordering::{AcqRel, Relaxed}; use crate::loom::sync::{Arc, RwLock, RwLockReadGuard}; + use std::fmt; use std::mem; use std::ops; @@ -280,6 +283,8 @@ impl fmt::Debug for Shared { pub mod error { //! Watch error types. + use crate::alias::std; + use std::error::Error; use std::fmt; @@ -320,6 +325,7 @@ pub mod error { mod big_notify { use super::Notify; + use crate::alias::std; use crate::sync::notify::Notified; // To avoid contention on the lock inside the `Notify`, we store multiple From 1cb5d737b1c4aecce971d7e4e7506aa020adec64 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 13:18:14 -0500 Subject: [PATCH 08/19] FIXUP for net feature - XXX TODO Windows etc. ??? --- tokio/Cargo.toml | 1 + tokio/src/io/interest.rs | 1 + tokio/src/io/ready.rs | 1 + tokio/src/lib.rs | 4 ++-- tokio/src/net/addr.rs | 4 ++++ tokio/src/net/lookup_host.rs | 1 + tokio/src/net/tcp/listener.rs | 2 ++ tokio/src/net/tcp/socket.rs | 1 + tokio/src/net/tcp/split.rs | 1 + tokio/src/net/tcp/split_owned.rs | 1 + tokio/src/net/tcp/stream.rs | 3 +++ tokio/src/net/udp.rs | 2 ++ tokio/src/net/unix/datagram/socket.rs | 1 + tokio/src/net/unix/listener.rs | 1 + tokio/src/net/unix/pipe.rs | 1 + tokio/src/net/unix/socket.rs | 2 ++ tokio/src/net/unix/socketaddr.rs | 2 ++ tokio/src/net/unix/split.rs | 1 + tokio/src/net/unix/split_owned.rs | 2 ++ tokio/src/net/unix/stream.rs | 1 + tokio/src/net/unix/ucred.rs | 2 ++ tokio/src/runtime/io/driver.rs | 1 + tokio/src/runtime/io/registration.rs | 1 + tokio/src/runtime/io/registration_set.rs | 1 + tokio/src/runtime/io/scheduled_io.rs | 1 + tokio/src/util/bit.rs | 2 ++ tokio/src/util/ptr_expose.rs | 3 +++ 27 files changed, 42 insertions(+), 2 deletions(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index 10edeeb3b58..87e7e3d0739 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -51,6 +51,7 @@ io-util = ["bytes"] io-std = ["std"] macros = ["std", "tokio-macros"] net = [ + "std", "libc", "mio/os-poll", "mio/os-ext", diff --git a/tokio/src/io/interest.rs b/tokio/src/io/interest.rs index a15b28cf79a..109e89af72c 100644 --- a/tokio/src/io/interest.rs +++ b/tokio/src/io/interest.rs @@ -1,5 +1,6 @@ #![cfg_attr(not(feature = "net"), allow(dead_code, unreachable_pub))] +use crate::alias::std; use crate::io::ready::Ready; use std::fmt; diff --git a/tokio/src/io/ready.rs b/tokio/src/io/ready.rs index 919f1992c6b..8fb1cb6dda8 100644 --- a/tokio/src/io/ready.rs +++ b/tokio/src/io/ready.rs @@ -1,5 +1,6 @@ #![cfg_attr(not(feature = "net"), allow(unreachable_pub))] +use crate::alias::std; use crate::io::interest::Interest; use std::fmt; diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index a4e17a79a60..94f72ef7d57 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -678,7 +678,7 @@ pub(crate) mod alias { pub(crate) use super::vec::Vec; } - pub(crate) use core::{any, cell, convert, cmp, fmt, future, hint, iter, marker, mem, num, ops, pin, ptr, slice, task}; + pub(crate) use core::{any, cell, convert, cmp, fmt, future, hint, iter, marker, mem, num, ops, option, pin, ptr, slice, task}; pub(crate) use crate::alloc::{borrow, boxed, rc, str, string, vec}; @@ -695,7 +695,7 @@ pub(crate) mod alias { pub(crate) use std::io; #[cfg(feature = "std")] - pub(crate) use std::{alloc, collections, env, error, ffi, fs, hash, os, panic, path, process, result, thread, thread_local}; + pub(crate) use std::{alloc, collections, env, error, ffi, fs, hash, net, os, panic, path, process, result, thread, thread_local}; pub(crate) mod sync { pub(crate) use core::sync::atomic; diff --git a/tokio/src/net/addr.rs b/tokio/src/net/addr.rs index a098990bb79..d6a9ac872a7 100644 --- a/tokio/src/net/addr.rs +++ b/tokio/src/net/addr.rs @@ -1,3 +1,5 @@ +use crate::alias::std::{self, prelude::*}; + use std::future; use std::io; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6}; @@ -254,6 +256,8 @@ pub(crate) mod sealed { //! part of the `ToSocketAddrs` public API. The details will change over //! time. + use crate::alias::std; + use std::future::Future; use std::io; use std::net::SocketAddr; diff --git a/tokio/src/net/lookup_host.rs b/tokio/src/net/lookup_host.rs index 28861849e40..6fcf4899132 100644 --- a/tokio/src/net/lookup_host.rs +++ b/tokio/src/net/lookup_host.rs @@ -1,4 +1,5 @@ cfg_net! { + use crate::alias::std; use crate::net::addr::{self, ToSocketAddrs}; use std::io; diff --git a/tokio/src/net/tcp/listener.rs b/tokio/src/net/tcp/listener.rs index 1545e654128..9bd7d7c2fa5 100644 --- a/tokio/src/net/tcp/listener.rs +++ b/tokio/src/net/tcp/listener.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::{Interest, PollEvented}; use crate::net::tcp::TcpStream; @@ -400,6 +401,7 @@ impl fmt::Debug for TcpListener { #[cfg(unix)] mod sys { use super::TcpListener; + use crate::alias::std; use std::os::unix::prelude::*; impl AsRawFd for TcpListener { diff --git a/tokio/src/net/tcp/socket.rs b/tokio/src/net/tcp/socket.rs index a9b454b3c52..f85410b4c45 100644 --- a/tokio/src/net/tcp/socket.rs +++ b/tokio/src/net/tcp/socket.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::net::{TcpListener, TcpStream}; use std::fmt; diff --git a/tokio/src/net/tcp/split.rs b/tokio/src/net/tcp/split.rs index 8cf53abf53f..2492b54be6f 100644 --- a/tokio/src/net/tcp/split.rs +++ b/tokio/src/net/tcp/split.rs @@ -8,6 +8,7 @@ //! split has no associated overhead and enforces all invariants at the type //! level. +use crate::alias::std; use crate::io::{AsyncRead, AsyncWrite, Interest, ReadBuf, Ready}; use crate::net::TcpStream; diff --git a/tokio/src/net/tcp/split_owned.rs b/tokio/src/net/tcp/split_owned.rs index 025d2fe73ec..77a6b539b15 100644 --- a/tokio/src/net/tcp/split_owned.rs +++ b/tokio/src/net/tcp/split_owned.rs @@ -8,6 +8,7 @@ //! split has no associated overhead and enforces all invariants at the type //! level. +use crate::alias::std; use crate::io::{AsyncRead, AsyncWrite, Interest, ReadBuf, Ready}; use crate::net::TcpStream; diff --git a/tokio/src/net/tcp/stream.rs b/tokio/src/net/tcp/stream.rs index 0504bf2e1ea..1f55c4c055e 100644 --- a/tokio/src/net/tcp/stream.rs +++ b/tokio/src/net/tcp/stream.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + cfg_not_wasi! { use crate::net::{to_socket_addrs, ToSocketAddrs}; use std::future::poll_fn; @@ -1375,6 +1377,7 @@ impl fmt::Debug for TcpStream { #[cfg(unix)] mod sys { use super::TcpStream; + use crate::alias::std; use std::os::unix::prelude::*; impl AsRawFd for TcpStream { diff --git a/tokio/src/net/udp.rs b/tokio/src/net/udp.rs index 2690a84b602..dbf55547dcd 100644 --- a/tokio/src/net/udp.rs +++ b/tokio/src/net/udp.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::{Interest, PollEvented, ReadBuf, Ready}; use crate::net::{to_socket_addrs, ToSocketAddrs}; @@ -2165,6 +2166,7 @@ impl fmt::Debug for UdpSocket { #[cfg(unix)] mod sys { use super::UdpSocket; + use crate::alias::std; use std::os::unix::prelude::*; impl AsRawFd for UdpSocket { diff --git a/tokio/src/net/unix/datagram/socket.rs b/tokio/src/net/unix/datagram/socket.rs index e475778ef66..82d971243b2 100644 --- a/tokio/src/net/unix/datagram/socket.rs +++ b/tokio/src/net/unix/datagram/socket.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::{Interest, PollEvented, ReadBuf, Ready}; use crate::net::unix::SocketAddr; diff --git a/tokio/src/net/unix/listener.rs b/tokio/src/net/unix/listener.rs index 9977020a283..5019c2f219c 100644 --- a/tokio/src/net/unix/listener.rs +++ b/tokio/src/net/unix/listener.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::{Interest, PollEvented}; use crate::net::unix::{SocketAddr, UnixStream}; diff --git a/tokio/src/net/unix/pipe.rs b/tokio/src/net/unix/pipe.rs index 7c279134dbf..2b7659067c3 100644 --- a/tokio/src/net/unix/pipe.rs +++ b/tokio/src/net/unix/pipe.rs @@ -1,5 +1,6 @@ //! Unix pipe types. +use crate::alias::std; use crate::io::interest::Interest; use crate::io::{AsyncRead, AsyncWrite, PollEvented, ReadBuf, Ready}; diff --git a/tokio/src/net/unix/socket.rs b/tokio/src/net/unix/socket.rs index cb383b09a59..9dd8f826adc 100644 --- a/tokio/src/net/unix/socket.rs +++ b/tokio/src/net/unix/socket.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::io; use std::path::Path; diff --git a/tokio/src/net/unix/socketaddr.rs b/tokio/src/net/unix/socketaddr.rs index 063f4c53faf..aaf4164fc36 100644 --- a/tokio/src/net/unix/socketaddr.rs +++ b/tokio/src/net/unix/socketaddr.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::fmt; use std::path::Path; diff --git a/tokio/src/net/unix/split.rs b/tokio/src/net/unix/split.rs index 8b004c4a509..0bf6d9e2c98 100644 --- a/tokio/src/net/unix/split.rs +++ b/tokio/src/net/unix/split.rs @@ -8,6 +8,7 @@ //! split has no associated overhead and enforces all invariants at the type //! level. +use crate::alias::std; use crate::io::{AsyncRead, AsyncWrite, Interest, ReadBuf, Ready}; use crate::net::UnixStream; diff --git a/tokio/src/net/unix/split_owned.rs b/tokio/src/net/unix/split_owned.rs index d1c6f93ded7..1277acc0dfa 100644 --- a/tokio/src/net/unix/split_owned.rs +++ b/tokio/src/net/unix/split_owned.rs @@ -8,10 +8,12 @@ //! split has no associated overhead and enforces all invariants at the type //! level. +use crate::alias::std; use crate::io::{AsyncRead, AsyncWrite, Interest, ReadBuf, Ready}; use crate::net::UnixStream; use crate::net::unix::SocketAddr; + use std::error::Error; use std::net::Shutdown; use std::pin::Pin; diff --git a/tokio/src/net/unix/stream.rs b/tokio/src/net/unix/stream.rs index 16dc03f9a30..544b42f3435 100644 --- a/tokio/src/net/unix/stream.rs +++ b/tokio/src/net/unix/stream.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::{AsyncRead, AsyncWrite, Interest, PollEvented, ReadBuf, Ready}; use crate::net::unix::split::{split, ReadHalf, WriteHalf}; use crate::net::unix::split_owned::{split_owned, OwnedReadHalf, OwnedWriteHalf}; diff --git a/tokio/src/net/unix/ucred.rs b/tokio/src/net/unix/ucred.rs index 74e596bc9b6..2f51b357891 100644 --- a/tokio/src/net/unix/ucred.rs +++ b/tokio/src/net/unix/ucred.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::net::unix; /// Credentials of a process. @@ -208,6 +209,7 @@ pub(crate) mod impl_bsd { target_os = "visionos" ))] pub(crate) mod impl_macos { + use crate::alias::std; use crate::net::unix::{self, UnixStream}; use libc::{c_void, getpeereid, getsockopt, pid_t, LOCAL_PEEREPID, SOL_LOCAL}; diff --git a/tokio/src/runtime/io/driver.rs b/tokio/src/runtime/io/driver.rs index 1139cbf580c..651fd72dba5 100644 --- a/tokio/src/runtime/io/driver.rs +++ b/tokio/src/runtime/io/driver.rs @@ -3,6 +3,7 @@ cfg_signal_internal_and_unix! { mod signal; } +use crate::alias::std; use crate::io::interest::Interest; use crate::io::ready::Ready; use crate::loom::sync::Mutex; diff --git a/tokio/src/runtime/io/registration.rs b/tokio/src/runtime/io/registration.rs index 16e79e82515..7fc4022dd64 100644 --- a/tokio/src/runtime/io/registration.rs +++ b/tokio/src/runtime/io/registration.rs @@ -1,5 +1,6 @@ #![cfg_attr(not(feature = "net"), allow(dead_code))] +use crate::alias::std; use crate::io::interest::Interest; use crate::runtime::io::{Direction, Handle, ReadyEvent, ScheduledIo}; use crate::runtime::scheduler; diff --git a/tokio/src/runtime/io/registration_set.rs b/tokio/src/runtime/io/registration_set.rs index 9b23732d96a..cb150ba54db 100644 --- a/tokio/src/runtime/io/registration_set.rs +++ b/tokio/src/runtime/io/registration_set.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::atomic::AtomicUsize; use crate::runtime::io::ScheduledIo; use crate::util::linked_list::{self, LinkedList}; diff --git a/tokio/src/runtime/io/scheduled_io.rs b/tokio/src/runtime/io/scheduled_io.rs index af57caed460..937af1acc09 100644 --- a/tokio/src/runtime/io/scheduled_io.rs +++ b/tokio/src/runtime/io/scheduled_io.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::io::interest::Interest; use crate::io::ready::Ready; use crate::loom::sync::atomic::AtomicUsize; diff --git a/tokio/src/util/bit.rs b/tokio/src/util/bit.rs index d71ad548ce8..661acf3a766 100644 --- a/tokio/src/util/bit.rs +++ b/tokio/src/util/bit.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::fmt; #[derive(Clone, Copy, PartialEq)] diff --git a/tokio/src/util/ptr_expose.rs b/tokio/src/util/ptr_expose.rs index c69722fd1b6..81c1cf9f03a 100644 --- a/tokio/src/util/ptr_expose.rs +++ b/tokio/src/util/ptr_expose.rs @@ -4,7 +4,10 @@ //! under miri, pointer casts are replaced with lookups in a hash map. This makes Tokio compatible //! with strict provenance when running under miri (which comes with a performance cost). +use crate::alias::std; + use std::marker::PhantomData; + #[cfg(miri)] use {crate::loom::sync::Mutex, std::collections::BTreeMap}; From ebb5b51fa7c887bd01d3f53b97d8216d3554481e Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 13:30:29 -0500 Subject: [PATCH 09/19] FIXUP for rt-multi-thread feature --- tokio/src/lib.rs | 4 +++- tokio/src/runtime/scheduler/inject/rt_multi_thread.rs | 1 + tokio/src/runtime/scheduler/multi_thread/handle.rs | 1 + tokio/src/runtime/scheduler/multi_thread/idle.rs | 1 + tokio/src/runtime/scheduler/multi_thread/mod.rs | 1 + tokio/src/runtime/scheduler/multi_thread/park.rs | 1 + tokio/src/runtime/scheduler/multi_thread/queue.rs | 1 + tokio/src/runtime/scheduler/multi_thread/stats.rs | 1 + tokio/src/runtime/scheduler/multi_thread/worker.rs | 1 + .../runtime/scheduler/multi_thread/worker/taskdump_mock.rs | 1 + tokio/src/util/try_lock.rs | 1 + 11 files changed, 13 insertions(+), 1 deletion(-) diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index 94f72ef7d57..e7702baef75 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -673,6 +673,8 @@ pub(crate) mod alias { pub(crate) mod prelude { pub(crate) use super::borrow::ToOwned; pub(crate) use super::boxed::Box; + #[cfg(feature = "std")] + pub(crate) use super::eprintln; pub(crate) use super::string::String; pub(crate) use super::vec; pub(crate) use super::vec::Vec; @@ -695,7 +697,7 @@ pub(crate) mod alias { pub(crate) use std::io; #[cfg(feature = "std")] - pub(crate) use std::{alloc, collections, env, error, ffi, fs, hash, net, os, panic, path, process, result, thread, thread_local}; + pub(crate) use std::{alloc, collections, env, eprintln, error, ffi, fs, hash, net, os, panic, path, process, result, thread, thread_local}; pub(crate) mod sync { pub(crate) use core::sync::atomic; diff --git a/tokio/src/runtime/scheduler/inject/rt_multi_thread.rs b/tokio/src/runtime/scheduler/inject/rt_multi_thread.rs index 1d5f0403b5d..64c4888bfb6 100644 --- a/tokio/src/runtime/scheduler/inject/rt_multi_thread.rs +++ b/tokio/src/runtime/scheduler/inject/rt_multi_thread.rs @@ -1,5 +1,6 @@ use super::{Shared, Synced}; +use crate::alias::std; use crate::runtime::scheduler::Lock; use crate::runtime::task; diff --git a/tokio/src/runtime/scheduler/multi_thread/handle.rs b/tokio/src/runtime/scheduler/multi_thread/handle.rs index 4075713c979..5ee3cda745f 100644 --- a/tokio/src/runtime/scheduler/multi_thread/handle.rs +++ b/tokio/src/runtime/scheduler/multi_thread/handle.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::future::Future; use crate::loom::sync::Arc; use crate::runtime::scheduler::multi_thread::worker; diff --git a/tokio/src/runtime/scheduler/multi_thread/idle.rs b/tokio/src/runtime/scheduler/multi_thread/idle.rs index 834bc2b66fc..20497b66ebe 100644 --- a/tokio/src/runtime/scheduler/multi_thread/idle.rs +++ b/tokio/src/runtime/scheduler/multi_thread/idle.rs @@ -1,5 +1,6 @@ //! Coordinates idling workers +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::atomic::AtomicUsize; use crate::runtime::scheduler::multi_thread::Shared; diff --git a/tokio/src/runtime/scheduler/multi_thread/mod.rs b/tokio/src/runtime/scheduler/multi_thread/mod.rs index d85a0ae0a2a..dfabcc26f36 100644 --- a/tokio/src/runtime/scheduler/multi_thread/mod.rs +++ b/tokio/src/runtime/scheduler/multi_thread/mod.rs @@ -37,6 +37,7 @@ cfg_not_taskdump! { pub(crate) use worker::block_in_place; +use crate::alias::std; use crate::loom::sync::Arc; use crate::runtime::{ blocking, diff --git a/tokio/src/runtime/scheduler/multi_thread/park.rs b/tokio/src/runtime/scheduler/multi_thread/park.rs index b00c648e6d3..7511a8dbe98 100644 --- a/tokio/src/runtime/scheduler/multi_thread/park.rs +++ b/tokio/src/runtime/scheduler/multi_thread/park.rs @@ -2,6 +2,7 @@ //! //! A combination of the various resource driver park handles. +use crate::alias::std; use crate::loom::sync::atomic::AtomicUsize; use crate::loom::sync::{Arc, Condvar, Mutex}; use crate::runtime::driver::{self, Driver}; diff --git a/tokio/src/runtime/scheduler/multi_thread/queue.rs b/tokio/src/runtime/scheduler/multi_thread/queue.rs index bf546fde518..911d497dd27 100644 --- a/tokio/src/runtime/scheduler/multi_thread/queue.rs +++ b/tokio/src/runtime/scheduler/multi_thread/queue.rs @@ -1,5 +1,6 @@ //! Run-queue structures to support a work-stealing scheduler +use crate::alias::std::{self, prelude::*}; use crate::loom::cell::UnsafeCell; use crate::loom::sync::Arc; use crate::runtime::scheduler::multi_thread::{Overflow, Stats}; diff --git a/tokio/src/runtime/scheduler/multi_thread/stats.rs b/tokio/src/runtime/scheduler/multi_thread/stats.rs index c59d4373ab8..15a42d67327 100644 --- a/tokio/src/runtime/scheduler/multi_thread/stats.rs +++ b/tokio/src/runtime/scheduler/multi_thread/stats.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::runtime::{Config, MetricsBatch, WorkerMetrics}; use std::time::{Duration, Instant}; diff --git a/tokio/src/runtime/scheduler/multi_thread/worker.rs b/tokio/src/runtime/scheduler/multi_thread/worker.rs index ec15106fe1a..c8829e95d79 100644 --- a/tokio/src/runtime/scheduler/multi_thread/worker.rs +++ b/tokio/src/runtime/scheduler/multi_thread/worker.rs @@ -56,6 +56,7 @@ //! the inject queue indefinitely. This would be a ref-count cycle and a memory //! leak. +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::{Arc, Mutex}; use crate::runtime; use crate::runtime::scheduler::multi_thread::{ diff --git a/tokio/src/runtime/scheduler/multi_thread/worker/taskdump_mock.rs b/tokio/src/runtime/scheduler/multi_thread/worker/taskdump_mock.rs index 24c5600ce2d..171b1bdf9d6 100644 --- a/tokio/src/runtime/scheduler/multi_thread/worker/taskdump_mock.rs +++ b/tokio/src/runtime/scheduler/multi_thread/worker/taskdump_mock.rs @@ -1,3 +1,4 @@ +use crate::alias::std::prelude::*; use super::{Core, Handle}; impl Handle { diff --git a/tokio/src/util/try_lock.rs b/tokio/src/util/try_lock.rs index 8b0edb4a873..ce4eba295dd 100644 --- a/tokio/src/util/try_lock.rs +++ b/tokio/src/util/try_lock.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::loom::sync::atomic::AtomicBool; use std::cell::UnsafeCell; From f5d6ebb09617e120947e44961d96796486a579c5 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 13:39:55 -0500 Subject: [PATCH 10/19] FIXUP for feature: process --- tokio/Cargo.toml | 1 + tokio/src/future/try_join.rs | 1 + tokio/src/lib.rs | 3 ++- tokio/src/process/kill.rs | 2 ++ tokio/src/process/mod.rs | 2 ++ tokio/src/process/unix/mod.rs | 1 + tokio/src/process/unix/orphan.rs | 2 ++ tokio/src/process/unix/reap.rs | 1 + tokio/src/runtime/io/driver/signal.rs | 2 ++ tokio/src/runtime/process.rs | 1 + tokio/src/runtime/signal/mod.rs | 1 + tokio/src/signal/mod.rs | 3 +++ tokio/src/signal/registry.rs | 1 + tokio/src/signal/reusable_box.rs | 2 ++ tokio/src/signal/unix.rs | 1 + 15 files changed, 23 insertions(+), 1 deletion(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index 87e7e3d0739..d94c0dd9a63 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -65,6 +65,7 @@ net = [ ] portable-io = ["dep:portable-io"] process = [ + "std", "bytes", "libc", "mio/os-poll", diff --git a/tokio/src/future/try_join.rs b/tokio/src/future/try_join.rs index 8943f61a1eb..a1e914aedbb 100644 --- a/tokio/src/future/try_join.rs +++ b/tokio/src/future/try_join.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::future::maybe_done::{maybe_done, MaybeDone}; use pin_project_lite::pin_project; diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index e7702baef75..d3e1a460e22 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -675,6 +675,7 @@ pub(crate) mod alias { pub(crate) use super::boxed::Box; #[cfg(feature = "std")] pub(crate) use super::eprintln; + pub(crate) use super::format; pub(crate) use super::string::String; pub(crate) use super::vec; pub(crate) use super::vec::Vec; @@ -682,7 +683,7 @@ pub(crate) mod alias { pub(crate) use core::{any, cell, convert, cmp, fmt, future, hint, iter, marker, mem, num, ops, option, pin, ptr, slice, task}; - pub(crate) use crate::alloc::{borrow, boxed, rc, str, string, vec}; + pub(crate) use crate::alloc::{borrow, boxed, format, rc, str, string, vec}; #[cfg(feature = "portable-io")] pub(crate) use portable_io as io; diff --git a/tokio/src/process/kill.rs b/tokio/src/process/kill.rs index a1f16522819..e07b1855aca 100644 --- a/tokio/src/process/kill.rs +++ b/tokio/src/process/kill.rs @@ -1,3 +1,5 @@ +use crate::alias::std; + use std::io; /// An interface for killing a running process. diff --git a/tokio/src/process/mod.rs b/tokio/src/process/mod.rs index 565795ac4e6..da5f4ecfdd0 100644 --- a/tokio/src/process/mod.rs +++ b/tokio/src/process/mod.rs @@ -241,6 +241,7 @@ mod imp; mod kill; +use crate::alias::std::{self, prelude::*}; use crate::io::{AsyncRead, AsyncWrite, ReadBuf}; use crate::process::kill::Kill; @@ -1490,6 +1491,7 @@ impl TryInto for ChildStderr { #[cfg(unix)] #[cfg_attr(docsrs, doc(cfg(unix)))] mod sys { + use crate::alias::std; use std::{ io, os::unix::io::{AsFd, AsRawFd, BorrowedFd, OwnedFd, RawFd}, diff --git a/tokio/src/process/unix/mod.rs b/tokio/src/process/unix/mod.rs index c9d1035f53d..91fa6593a89 100644 --- a/tokio/src/process/unix/mod.rs +++ b/tokio/src/process/unix/mod.rs @@ -30,6 +30,7 @@ use reap::Reaper; #[cfg(all(target_os = "linux", feature = "rt"))] mod pidfd_reaper; +use crate::alias::std; use crate::io::{AsyncRead, AsyncWrite, PollEvented, ReadBuf}; use crate::process::kill::Kill; use crate::process::SpawnedChild; diff --git a/tokio/src/process/unix/orphan.rs b/tokio/src/process/unix/orphan.rs index a89555f5876..cd7d7c4dcd2 100644 --- a/tokio/src/process/unix/orphan.rs +++ b/tokio/src/process/unix/orphan.rs @@ -1,7 +1,9 @@ +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::{Mutex, MutexGuard}; use crate::runtime::signal::Handle as SignalHandle; use crate::signal::unix::{signal_with_handle, SignalKind}; use crate::sync::watch; + use std::io; use std::process::ExitStatus; diff --git a/tokio/src/process/unix/reap.rs b/tokio/src/process/unix/reap.rs index f7f4d3cc705..b6f99bcf293 100644 --- a/tokio/src/process/unix/reap.rs +++ b/tokio/src/process/unix/reap.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::process::imp::orphan::{OrphanQueue, Wait}; use crate::process::kill::Kill; use crate::signal::unix::InternalStream; diff --git a/tokio/src/runtime/io/driver/signal.rs b/tokio/src/runtime/io/driver/signal.rs index ea3ef07b611..496f432c548 100644 --- a/tokio/src/runtime/io/driver/signal.rs +++ b/tokio/src/runtime/io/driver/signal.rs @@ -1,5 +1,7 @@ use super::{Driver, Handle, TOKEN_SIGNAL}; +use crate::alias::std; + use std::io; impl Handle { diff --git a/tokio/src/runtime/process.rs b/tokio/src/runtime/process.rs index 8efb786d00a..73a0f4cf456 100644 --- a/tokio/src/runtime/process.rs +++ b/tokio/src/runtime/process.rs @@ -2,6 +2,7 @@ //! Process driver. +use crate::alias::std; use crate::process::unix::GlobalOrphanQueue; use crate::runtime::driver; use crate::runtime::signal::{Driver as SignalDriver, Handle as SignalHandle}; diff --git a/tokio/src/runtime/signal/mod.rs b/tokio/src/runtime/signal/mod.rs index 8055c0965a6..864a531cdbd 100644 --- a/tokio/src/runtime/signal/mod.rs +++ b/tokio/src/runtime/signal/mod.rs @@ -2,6 +2,7 @@ //! Signal driver +use crate::alias::std; use crate::runtime::{driver, io}; use crate::signal::registry::globals; diff --git a/tokio/src/signal/mod.rs b/tokio/src/signal/mod.rs index cca3963e113..907d07afe82 100644 --- a/tokio/src/signal/mod.rs +++ b/tokio/src/signal/mod.rs @@ -42,7 +42,10 @@ //! } //! # } //! ``` + +use crate::alias::std; use crate::sync::watch::Receiver; + use std::task::{Context, Poll}; #[cfg(feature = "signal")] diff --git a/tokio/src/signal/registry.rs b/tokio/src/signal/registry.rs index e5358cae324..9a429f15fa7 100644 --- a/tokio/src/signal/registry.rs +++ b/tokio/src/signal/registry.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::signal::os::{OsExtraData, OsStorage}; use crate::sync::watch; use crate::util::once_cell::OnceCell; diff --git a/tokio/src/signal/reusable_box.rs b/tokio/src/signal/reusable_box.rs index 796fa210b03..44fd6a694c8 100644 --- a/tokio/src/signal/reusable_box.rs +++ b/tokio/src/signal/reusable_box.rs @@ -1,3 +1,5 @@ +use crate::alias::std::{self, prelude::*}; + use std::alloc::Layout; use std::future::Future; use std::panic::AssertUnwindSafe; diff --git a/tokio/src/signal/unix.rs b/tokio/src/signal/unix.rs index e70863b54b7..ced73c82514 100644 --- a/tokio/src/signal/unix.rs +++ b/tokio/src/signal/unix.rs @@ -6,6 +6,7 @@ #![cfg(unix)] #![cfg_attr(docsrs, doc(cfg(all(unix, feature = "signal"))))] +use crate::alias::std::{self, prelude::*}; use crate::runtime::scheduler; use crate::runtime::signal::Handle; use crate::signal::registry::{globals, EventId, EventInfo, Globals, Init, Storage}; From eb9b86c31139a43614a00f5ddf583b8a9753383e Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 15:32:13 -0500 Subject: [PATCH 11/19] FIXUP for feature: signal --- tokio/Cargo.toml | 1 + tokio/src/signal/ctrl_c.rs | 2 ++ 2 files changed, 3 insertions(+) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index d94c0dd9a63..abf157000ed 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -80,6 +80,7 @@ process = [ rt = ["std"] rt-multi-thread = ["rt"] signal = [ + "std", "libc", "mio/os-poll", "mio/net", diff --git a/tokio/src/signal/ctrl_c.rs b/tokio/src/signal/ctrl_c.rs index e1e92fa9977..e336d85dda8 100644 --- a/tokio/src/signal/ctrl_c.rs +++ b/tokio/src/signal/ctrl_c.rs @@ -3,6 +3,8 @@ use super::unix::{self as os_impl}; #[cfg(windows)] use super::windows::{self as os_impl}; +use crate::alias::std; + use std::io; /// Completes when a "ctrl-c" notification is sent to the process. From a3c60a89be22974eb59a2c2a3fa999daff544b02 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 15:57:04 -0500 Subject: [PATCH 12/19] FIXUP for feature: time --- tokio/Cargo.toml | 2 +- tokio/src/lib.rs | 4 ++-- tokio/src/runtime/time/entry.rs | 2 ++ tokio/src/runtime/time/handle.rs | 2 ++ tokio/src/runtime/time/mod.rs | 1 + tokio/src/runtime/time/wheel/level.rs | 1 + tokio/src/runtime/time/wheel/mod.rs | 1 + tokio/src/time/clock.rs | 2 ++ tokio/src/time/error.rs | 2 ++ tokio/src/time/instant.rs | 3 +++ tokio/src/time/interval.rs | 1 + tokio/src/time/mod.rs | 2 ++ tokio/src/time/sleep.rs | 1 + tokio/src/time/timeout.rs | 1 + tokio/src/util/trace.rs | 4 ++-- 15 files changed, 24 insertions(+), 5 deletions(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index abf157000ed..346ed0b550b 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -92,7 +92,7 @@ signal = [ std = [] sync = ["std"] test-util = ["rt", "sync", "time"] -time = [] +time = ["std"] [dependencies] tokio-macros = { version = "~2.5.0", path = "../tokio-macros", optional = true } diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index d3e1a460e22..5420dddd42a 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -681,7 +681,7 @@ pub(crate) mod alias { pub(crate) use super::vec::Vec; } - pub(crate) use core::{any, cell, convert, cmp, fmt, future, hint, iter, marker, mem, num, ops, option, pin, ptr, slice, task}; + pub(crate) use core::{any, array, cell, convert, cmp, fmt, future, hint, iter, marker, mem, num, ops, option, pin, ptr, slice, task}; pub(crate) use crate::alloc::{borrow, boxed, format, rc, str, string, vec}; @@ -714,7 +714,7 @@ pub(crate) mod alias { extern crate std; #[cfg(feature = "std")] - pub(crate) use std::time::*; + pub use std::time::*; } } } diff --git a/tokio/src/runtime/time/entry.rs b/tokio/src/runtime/time/entry.rs index 834077caa3d..a6e36fa1e8f 100644 --- a/tokio/src/runtime/time/entry.rs +++ b/tokio/src/runtime/time/entry.rs @@ -54,6 +54,8 @@ //! //! [mark_pending]: TimerHandle::mark_pending +use crate::alias::std; + use crate::loom::cell::UnsafeCell; use crate::loom::sync::atomic::AtomicU64; use crate::loom::sync::atomic::Ordering; diff --git a/tokio/src/runtime/time/handle.rs b/tokio/src/runtime/time/handle.rs index fce791d998c..b9ae9c94d81 100644 --- a/tokio/src/runtime/time/handle.rs +++ b/tokio/src/runtime/time/handle.rs @@ -1,4 +1,6 @@ +use crate::alias::std; use crate::runtime::time::TimeSource; + use std::fmt; /// Handle to time driver instance. diff --git a/tokio/src/runtime/time/mod.rs b/tokio/src/runtime/time/mod.rs index 56e0ba64d9c..2fe573bcf06 100644 --- a/tokio/src/runtime/time/mod.rs +++ b/tokio/src/runtime/time/mod.rs @@ -19,6 +19,7 @@ pub(crate) use source::TimeSource; mod wheel; +use crate::alias::std::{self, prelude::*}; use crate::loom::sync::atomic::{AtomicBool, Ordering}; use crate::loom::sync::{Mutex, RwLock}; use crate::runtime::driver::{self, IoHandle, IoStack}; diff --git a/tokio/src/runtime/time/wheel/level.rs b/tokio/src/runtime/time/wheel/level.rs index d31eaf46879..c9dfe49fdce 100644 --- a/tokio/src/runtime/time/wheel/level.rs +++ b/tokio/src/runtime/time/wheel/level.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::runtime::time::{EntryList, TimerHandle, TimerShared}; use std::{array, fmt, ptr::NonNull}; diff --git a/tokio/src/runtime/time/wheel/mod.rs b/tokio/src/runtime/time/wheel/mod.rs index 7040fc146b1..f536ac4ed16 100644 --- a/tokio/src/runtime/time/wheel/mod.rs +++ b/tokio/src/runtime/time/wheel/mod.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::runtime::time::{TimerHandle, TimerShared}; use crate::time::error::InsertError; diff --git a/tokio/src/time/clock.rs b/tokio/src/time/clock.rs index 50884f972fa..3c3155c88db 100644 --- a/tokio/src/time/clock.rs +++ b/tokio/src/time/clock.rs @@ -7,6 +7,7 @@ //! configurable. cfg_not_test_util! { + use crate::alias::std; use crate::time::{Instant}; #[derive(Debug, Clone)] @@ -28,6 +29,7 @@ cfg_not_test_util! { } cfg_test_util! { + use crate::alias::std; use crate::time::{Duration, Instant}; use crate::loom::sync::Mutex; use crate::loom::sync::atomic::Ordering; diff --git a/tokio/src/time/error.rs b/tokio/src/time/error.rs index 21920059090..bb6cabae3e0 100644 --- a/tokio/src/time/error.rs +++ b/tokio/src/time/error.rs @@ -1,5 +1,7 @@ //! Time error types. +use crate::alias::std; + use std::error; use std::fmt; diff --git a/tokio/src/time/instant.rs b/tokio/src/time/instant.rs index 44955dc9878..d257f46aa5e 100644 --- a/tokio/src/time/instant.rs +++ b/tokio/src/time/instant.rs @@ -1,5 +1,7 @@ #![allow(clippy::trivially_copy_pass_by_ref)] +use crate::alias::std; + use std::fmt; use std::ops; use std::time::Duration; @@ -207,6 +209,7 @@ impl fmt::Debug for Instant { #[cfg(not(feature = "test-util"))] mod variant { use super::Instant; + use crate::alias::std; pub(super) fn now() -> Instant { Instant::from_std(std::time::Instant::now()) diff --git a/tokio/src/time/interval.rs b/tokio/src/time/interval.rs index 0153a567f10..55c76caa89f 100644 --- a/tokio/src/time/interval.rs +++ b/tokio/src/time/interval.rs @@ -1,3 +1,4 @@ +use crate::alias::std::{self, prelude::*}; use crate::time::{sleep_until, Duration, Instant, Sleep}; use crate::util::trace; diff --git a/tokio/src/time/mod.rs b/tokio/src/time/mod.rs index c0cd7c62856..01b2bc7d515 100644 --- a/tokio/src/time/mod.rs +++ b/tokio/src/time/mod.rs @@ -84,6 +84,8 @@ //! [`interval`]: crate::time::interval() //! [`sleep`]: sleep() +use crate::alias::std; + mod clock; pub(crate) use self::clock::Clock; cfg_test_util! { diff --git a/tokio/src/time/sleep.rs b/tokio/src/time/sleep.rs index 6e59f1ff3d6..b137c9fd32b 100644 --- a/tokio/src/time/sleep.rs +++ b/tokio/src/time/sleep.rs @@ -1,3 +1,4 @@ +use crate::alias::std; use crate::runtime::time::TimerEntry; use crate::time::{error::Error, Duration, Instant}; use crate::util::trace; diff --git a/tokio/src/time/timeout.rs b/tokio/src/time/timeout.rs index fa93a16910e..0cc5d021881 100644 --- a/tokio/src/time/timeout.rs +++ b/tokio/src/time/timeout.rs @@ -5,6 +5,7 @@ //! [`Timeout`]: struct@Timeout use crate::{ + alias::std, runtime::coop, time::{error::Elapsed, sleep_until, Duration, Instant, Sleep}, util::trace, diff --git a/tokio/src/util/trace.rs b/tokio/src/util/trace.rs index fb2c83d5e3d..f45e24c0587 100644 --- a/tokio/src/util/trace.rs +++ b/tokio/src/util/trace.rs @@ -1,6 +1,6 @@ -cfg_rt! { - use crate::alias::std; +use crate::alias::std; +cfg_rt! { use std::marker::PhantomData; #[derive(Copy, Clone)] From 4a3001f1b795e7ee7d1a618dee7975d5d41b2e7e Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 19:05:06 -0500 Subject: [PATCH 13/19] enable "std" feature by default --- tokio/Cargo.toml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index 346ed0b550b..e84eeb34c49 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -22,10 +22,7 @@ categories = ["asynchronous", "network-programming"] keywords = ["io", "async", "non-blocking", "futures"] [features] -# Include nothing by default -default = [] -# XXX TODO: -# default = ["std"] +default = ["std"] # enable everything full = [ From 28c9e6785f8e2ea0a1934b89bbd7f39bf207ebda Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 19:25:27 -0500 Subject: [PATCH 14/19] enforce no-std compile conditions in lib.rs --- tokio/Cargo.toml | 1 - tokio/src/lib.rs | 19 ++++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index e84eeb34c49..f85ca958d9d 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -42,7 +42,6 @@ full = [ ] fs = ["std"] -# XXX TBD io-util no-std WITH portable-io io-util = ["bytes"] # stdin, stdout, stderr io-std = ["std"] diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index 5420dddd42a..8d1eaf35daa 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -493,6 +493,16 @@ compile_error!( linux, on `aarch64`, `x86` and `x86_64`." ); +#[cfg(not(any(feature = "std", feature = "portable-io")))] +compile_error!("std or portable-io feature is required (may use both)"); + +#[cfg(all( + feature = "io-util", + not(feature = "std"), + not(feature = "parking_lot"), +))] +compile_error!("io-util requires parking_lot to compile with no-std"); + // Includes re-exports used by macros. // // This module is not intended to be part of the public API. In general, any @@ -507,15 +517,6 @@ cfg_fs! { mod future; -// XXX TBD XXX XXX -#[cfg(any( - feature = "std", - feature = "portable-io", -))] -#[cfg_attr(docsrs, doc(cfg(any( - feature = "std", - feature = "portable-io", -))))] pub mod io; cfg_net! { From e4e85e95fd52204f32fd8244856d51d1e437bbb8 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 19:33:32 -0500 Subject: [PATCH 15/19] enforce: cannot use portable-io with fs, net, process, rt or signal --- tokio/src/fs/read.rs | 1 - tokio/src/lib.rs | 9 +++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/tokio/src/fs/read.rs b/tokio/src/fs/read.rs index 8da3660af9c..242f0093a4f 100644 --- a/tokio/src/fs/read.rs +++ b/tokio/src/fs/read.rs @@ -1,7 +1,6 @@ use crate::alias::std::{self, prelude::*}; use crate::fs::asyncify; -// XXX XXX portable io / fs - XXX use std::{io, path::Path}; /// Reads the entire contents of a file into a bytes vector. diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index 8d1eaf35daa..da245449fa3 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -503,6 +503,15 @@ compile_error!("std or portable-io feature is required (may use both)"); ))] compile_error!("io-util requires parking_lot to compile with no-std"); +#[cfg(all(feature = "portable-io", any( + feature = "fs", + feature = "net", + feature = "process", + feature = "rt", + feature = "signal", +)))] +compile_error!("cannot use portable-io with fs, net, process, rt or signal"); + // Includes re-exports used by macros. // // This module is not intended to be part of the public API. In general, any From ceeb582865d0e6e3d41de835b17cfc9ef956d58b Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 20:14:04 -0500 Subject: [PATCH 16/19] support write_all_buf() with portable-io with workaround --- tokio/src/io/util/async_write_ext.rs | 4 ---- tokio/src/io/util/mod.rs | 2 -- tokio/src/io/util/write_all_buf.rs | 8 ++++++++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/tokio/src/io/util/async_write_ext.rs b/tokio/src/io/util/async_write_ext.rs index 458db1fe5c0..d178ecf2ee2 100644 --- a/tokio/src/io/util/async_write_ext.rs +++ b/tokio/src/io/util/async_write_ext.rs @@ -3,8 +3,6 @@ use crate::io::util::flush::{flush, Flush}; use crate::io::util::shutdown::{shutdown, Shutdown}; use crate::io::util::write::{write, Write}; use crate::io::util::write_all::{write_all, WriteAll}; -// XXX TBD XXX XXX -#[cfg(not(feature = "portable-io"))] use crate::io::util::write_all_buf::{write_all_buf, WriteAllBuf}; use crate::io::util::write_buf::{write_buf, WriteBuf}; use crate::io::util::write_int::{WriteF32, WriteF32Le, WriteF64, WriteF64Le}; @@ -319,8 +317,6 @@ cfg_io_util! { /// ``` /// /// [`write`]: AsyncWriteExt::write - // XXX TBD XXX XXX - #[cfg(not(feature = "portable-io"))] fn write_all_buf<'a, B>(&'a mut self, src: &'a mut B) -> WriteAllBuf<'a, Self, B> where Self: Sized + Unpin, diff --git a/tokio/src/io/util/mod.rs b/tokio/src/io/util/mod.rs index b4263cd4670..9e00e1276f8 100644 --- a/tokio/src/io/util/mod.rs +++ b/tokio/src/io/util/mod.rs @@ -80,8 +80,6 @@ cfg_io_util! { mod write_vectored; mod write_all; mod write_buf; - // XXX TBD XXX XXX - #[cfg(not(feature = "portable-io"))] mod write_all_buf; mod write_int; diff --git a/tokio/src/io/util/write_all_buf.rs b/tokio/src/io/util/write_all_buf.rs index 5d3443807f7..a8473f32cb8 100644 --- a/tokio/src/io/util/write_all_buf.rs +++ b/tokio/src/io/util/write_all_buf.rs @@ -47,6 +47,12 @@ where let me = self.project(); while me.buf.has_remaining() { + // XXX QUICK ADAPTATION NEEDED to work with portable-io - XXX TBD OPEN QUESTION: + // Considering that Buf::chunks_vectored() only does 1 chunk at a time, + // the extra logic required here to call AsyncWrite::poll_write_vectored() + // does not seem to reduce the number of I/O poll calls. + // XXX TODO KEEP THIS FOR SEPARATE DISCUSSION + #[cfg(not(feature = "portable-io"))] let n = if me.writer.is_write_vectored() { let mut slices = [IoSlice::new(&[]); MAX_VECTOR_ELEMENTS]; let cnt = me.buf.chunks_vectored(&mut slices); @@ -54,6 +60,8 @@ where } else { ready!(Pin::new(&mut *me.writer).poll_write(cx, me.buf.chunk())?) }; + #[cfg(feature = "portable-io")] + let n = ready!(Pin::new(&mut *me.writer).poll_write(cx, me.buf.chunk())?); me.buf.advance(n); if n == 0 { return Poll::Ready(Err(io::ErrorKind::WriteZero.into())); From b51b84c32fb89cb435ec0126657b9ffcf174adc2 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 20:30:08 -0500 Subject: [PATCH 17/19] FIXUP tokio/src for testing - XXX SKIP fs test for now - XXX TODO INVESTIGATE & RESOLVE ISSUES with fs test mocks --- tokio/src/future/maybe_done.rs | 4 ++++ tokio/src/io/stdio_common.rs | 2 ++ tokio/src/lib.rs | 2 ++ tokio/src/process/mod.rs | 2 ++ tokio/src/process/unix/reap.rs | 2 ++ tokio/src/runtime/scheduler/multi_thread/overflow.rs | 2 +- tokio/src/runtime/tests/inject.rs | 4 ++++ tokio/src/runtime/tests/mod.rs | 1 + tokio/src/runtime/tests/queue.rs | 5 +++++ tokio/src/runtime/tests/task_combinations.rs | 1 + tokio/src/runtime/time/tests/mod.rs | 6 ++++++ tokio/src/signal/reusable_box.rs | 1 + tokio/src/sync/tests/atomic_waker.rs | 2 ++ tokio/src/sync/tests/notify.rs | 3 +++ tokio/src/sync/tests/semaphore_batch.rs | 3 +++ tokio/src/util/linked_list.rs | 4 ++++ tokio/src/util/memchr.rs | 2 ++ 17 files changed, 45 insertions(+), 1 deletion(-) diff --git a/tokio/src/future/maybe_done.rs b/tokio/src/future/maybe_done.rs index d4c054d1a50..01f76a38380 100644 --- a/tokio/src/future/maybe_done.rs +++ b/tokio/src/future/maybe_done.rs @@ -76,11 +76,15 @@ impl Future for MaybeDone { // Test for https://github.com/tokio-rs/tokio/issues/6729 #[cfg(test)] mod miri_tests { + extern crate std; + use std::borrow::ToOwned; + use super::maybe_done; use std::{ future::Future, pin::Pin, + string::String, sync::Arc, task::{Context, Poll, Wake}, }; diff --git a/tokio/src/io/stdio_common.rs b/tokio/src/io/stdio_common.rs index 58ed2480d46..f6720b8a980 100644 --- a/tokio/src/io/stdio_common.rs +++ b/tokio/src/io/stdio_common.rs @@ -112,12 +112,14 @@ where #[cfg(test)] #[cfg(not(loom))] mod tests { + extern crate std; use crate::io::blocking::DEFAULT_MAX_BUF_SIZE; use crate::io::AsyncWriteExt; use std::io; use std::pin::Pin; use std::task::Context; use std::task::Poll; + use std::vec::Vec; struct TextMockWriter; diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index da245449fa3..861bceba861 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -521,6 +521,8 @@ compile_error!("cannot use portable-io with fs, net, process, rt or signal"); pub mod macros; cfg_fs! { + // XXX SKIP TEST in fs for now - XXX TODO INVESTIGATE & RESOLVE ISSUES with fs test mocks + #[cfg(not(test))] pub mod fs; } diff --git a/tokio/src/process/mod.rs b/tokio/src/process/mod.rs index da5f4ecfdd0..d46d2bb8e1d 100644 --- a/tokio/src/process/mod.rs +++ b/tokio/src/process/mod.rs @@ -1591,6 +1591,8 @@ mod test { use super::kill::Kill; use super::ChildDropGuard; + extern crate std; + use futures::future::FutureExt; use std::future::Future; use std::io; diff --git a/tokio/src/process/unix/reap.rs b/tokio/src/process/unix/reap.rs index b6f99bcf293..3a17464b240 100644 --- a/tokio/src/process/unix/reap.rs +++ b/tokio/src/process/unix/reap.rs @@ -140,6 +140,8 @@ mod test { use std::process::ExitStatus; use std::task::Context; use std::task::Poll; + use std::vec; + use std::vec::Vec; #[derive(Debug)] struct MockWait { diff --git a/tokio/src/runtime/scheduler/multi_thread/overflow.rs b/tokio/src/runtime/scheduler/multi_thread/overflow.rs index ab664811cff..813e9d6cab7 100644 --- a/tokio/src/runtime/scheduler/multi_thread/overflow.rs +++ b/tokio/src/runtime/scheduler/multi_thread/overflow.rs @@ -1,7 +1,7 @@ use crate::runtime::task; #[cfg(test)] -use std::cell::RefCell; +use crate::alias::std::{cell::RefCell, vec::Vec}; pub(crate) trait Overflow { fn push(&self, task: task::Notified); diff --git a/tokio/src/runtime/tests/inject.rs b/tokio/src/runtime/tests/inject.rs index ccead5e024a..99b22743ad9 100644 --- a/tokio/src/runtime/tests/inject.rs +++ b/tokio/src/runtime/tests/inject.rs @@ -1,5 +1,9 @@ +extern crate std; + use crate::runtime::scheduler::inject; +use std::println; + #[test] fn push_and_pop() { const N: usize = 2; diff --git a/tokio/src/runtime/tests/mod.rs b/tokio/src/runtime/tests/mod.rs index 11901ebc9e5..058b692b7e4 100644 --- a/tokio/src/runtime/tests/mod.rs +++ b/tokio/src/runtime/tests/mod.rs @@ -29,6 +29,7 @@ mod noop_scheduler { } mod unowned_wrapper { + extern crate std; use crate::runtime::task::{Id, JoinHandle, Notified}; use crate::runtime::tests::NoopSchedule; diff --git a/tokio/src/runtime/tests/queue.rs b/tokio/src/runtime/tests/queue.rs index 8a57ae428e8..8f205dcd895 100644 --- a/tokio/src/runtime/tests/queue.rs +++ b/tokio/src/runtime/tests/queue.rs @@ -1,9 +1,14 @@ use crate::runtime::scheduler::multi_thread::{queue, Stats}; use crate::runtime::task::{self, Schedule, Task, TaskHarnessScheduleHooks}; +extern crate std; + use std::cell::RefCell; use std::thread; use std::time::Duration; +// XXX TBD TEST ??? +use std::vec; +use std::vec::Vec; #[allow(unused)] macro_rules! assert_metrics { diff --git a/tokio/src/runtime/tests/task_combinations.rs b/tokio/src/runtime/tests/task_combinations.rs index 0f99ed66247..ed485ff1101 100644 --- a/tokio/src/runtime/tests/task_combinations.rs +++ b/tokio/src/runtime/tests/task_combinations.rs @@ -1,3 +1,4 @@ +extern crate std; use std::fmt; use std::future::Future; use std::panic; diff --git a/tokio/src/runtime/time/tests/mod.rs b/tokio/src/runtime/time/tests/mod.rs index a2271b6fb9d..cd8a5e459da 100644 --- a/tokio/src/runtime/time/tests/mod.rs +++ b/tokio/src/runtime/time/tests/mod.rs @@ -1,6 +1,12 @@ #![cfg(not(target_os = "wasi"))] +extern crate std; + use std::{task::Context, time::Duration}; +use std::boxed::Box; + +// XXX TODO TEST ONLY +use std::vec; #[cfg(not(loom))] use futures::task::noop_waker_ref; diff --git a/tokio/src/signal/reusable_box.rs b/tokio/src/signal/reusable_box.rs index 44fd6a694c8..86cf597b652 100644 --- a/tokio/src/signal/reusable_box.rs +++ b/tokio/src/signal/reusable_box.rs @@ -154,6 +154,7 @@ impl fmt::Debug for ReusableBoxFuture { #[cfg(test)] mod test { + extern crate std; use super::ReusableBoxFuture; use futures::future::FutureExt; use std::alloc::Layout; diff --git a/tokio/src/sync/tests/atomic_waker.rs b/tokio/src/sync/tests/atomic_waker.rs index d89b44fa493..eaefc8ccc69 100644 --- a/tokio/src/sync/tests/atomic_waker.rs +++ b/tokio/src/sync/tests/atomic_waker.rs @@ -1,6 +1,8 @@ use crate::sync::AtomicWaker; use tokio_test::task; +extern crate std; + use std::task::Waker; #[allow(unused)] diff --git a/tokio/src/sync/tests/notify.rs b/tokio/src/sync/tests/notify.rs index 83182464c50..9c887ed2548 100644 --- a/tokio/src/sync/tests/notify.rs +++ b/tokio/src/sync/tests/notify.rs @@ -1,7 +1,10 @@ +extern crate std; use crate::sync::Notify; + use std::future::Future; use std::sync::Arc; use std::task::{Context, RawWaker, RawWakerVTable, Waker}; +use std::vec::Vec; #[cfg(all(target_family = "wasm", not(target_os = "wasi")))] use wasm_bindgen_test::wasm_bindgen_test as test; diff --git a/tokio/src/sync/tests/semaphore_batch.rs b/tokio/src/sync/tests/semaphore_batch.rs index fb5e8fdd6f7..f4f84b3dcb5 100644 --- a/tokio/src/sync/tests/semaphore_batch.rs +++ b/tokio/src/sync/tests/semaphore_batch.rs @@ -1,6 +1,9 @@ +extern crate std; use crate::sync::batch_semaphore::Semaphore; use tokio_test::*; +use std::boxed::Box; + const MAX_PERMITS: usize = crate::sync::Semaphore::MAX_PERMITS; #[cfg(all(target_family = "wasm", not(target_os = "wasi")))] diff --git a/tokio/src/util/linked_list.rs b/tokio/src/util/linked_list.rs index 3650f87fbb0..b4b3ad0df56 100644 --- a/tokio/src/util/linked_list.rs +++ b/tokio/src/util/linked_list.rs @@ -469,7 +469,11 @@ impl fmt::Debug for Pointers { pub(crate) mod tests { use super::*; + extern crate std; + use std::boxed::Box; use std::pin::Pin; + use std::vec; + use std::vec::Vec; #[derive(Debug)] #[repr(C)] diff --git a/tokio/src/util/memchr.rs b/tokio/src/util/memchr.rs index 44fd2da3719..17af809b3e0 100644 --- a/tokio/src/util/memchr.rs +++ b/tokio/src/util/memchr.rs @@ -25,6 +25,8 @@ pub(crate) fn memchr(needle: u8, haystack: &[u8]) -> Option { #[cfg(test)] mod tests { use super::memchr; + extern crate std; + use std::vec::Vec; #[test] fn memchr_test() { From dd97c7e5a5f475f4aba2b96c5b2fca06e5a0fd61 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 20:31:55 -0500 Subject: [PATCH 18/19] add XXX TODO - DOCUMENTATION comment --- tokio/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index 861bceba861..030db924879 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -23,6 +23,8 @@ #![no_std] +// XXX TODO UPDATE DOCUMENTATION FOR NEW FEATURES ADDED + //! A runtime for writing reliable network applications without compromising speed. //! //! Tokio is an event-driven, non-blocking I/O platform for writing asynchronous From e50e23a0f59c6f7d5d6fb964108364f7df02c0d0 Mon Sep 17 00:00:00 2001 From: "@brodycj - C. Jonathan Brody" Date: Tue, 14 Jan 2025 21:55:17 -0500 Subject: [PATCH 19/19] always use parking_lot with portable-io - to simplify feature restrictions --- tokio/Cargo.toml | 2 +- tokio/src/lib.rs | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index f85ca958d9d..24fe2485b9b 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -59,7 +59,7 @@ net = [ "windows-sys/Win32_System_Pipes", "windows-sys/Win32_System_SystemServices", ] -portable-io = ["dep:portable-io"] +portable-io = ["parking_lot", "dep:portable-io"] process = [ "std", "bytes", diff --git a/tokio/src/lib.rs b/tokio/src/lib.rs index 030db924879..f0d26b4aed7 100644 --- a/tokio/src/lib.rs +++ b/tokio/src/lib.rs @@ -498,13 +498,6 @@ linux, on `aarch64`, `x86` and `x86_64`." #[cfg(not(any(feature = "std", feature = "portable-io")))] compile_error!("std or portable-io feature is required (may use both)"); -#[cfg(all( - feature = "io-util", - not(feature = "std"), - not(feature = "parking_lot"), -))] -compile_error!("io-util requires parking_lot to compile with no-std"); - #[cfg(all(feature = "portable-io", any( feature = "fs", feature = "net",