Skip to content

Commit

Permalink
Merge 'tokio-1.20.6' into 'tokio-1.25.x' (#6025)
Browse files Browse the repository at this point in the history
  • Loading branch information
Darksonn committed Sep 22, 2023
2 parents 25258d5 + 938c7eb commit 60a0ca5
Show file tree
Hide file tree
Showing 8 changed files with 152 additions and 11 deletions.
24 changes: 15 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,8 @@ jobs:
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_nightly }}
- uses: Swatinem/rust-cache@v2
override: true
# - uses: Swatinem/rust-cache@v1 -> CI failure observed due to insufficient storage space
- name: asan
run: cargo test --workspace --all-features --target x86_64-unknown-linux-gnu --tests -- --test-threads 1
env:
Expand Down Expand Up @@ -330,9 +331,11 @@ jobs:
target: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- name: check --feature-powerset
run: cargo hack check --all --feature-powerset --depth 2 -Z avoid-dev-deps --keep-going
uses: taiki-e/install-action@v2
with:
tool: cargo-hack
- name: check --each-feature
run: cargo hack check --all --each-feature -Z avoid-dev-deps
# Try with unstable feature flags
- name: check --feature-powerset --unstable
run: cargo hack check --all --feature-powerset --depth 2 -Z avoid-dev-deps --keep-going
Expand Down Expand Up @@ -365,7 +368,9 @@ jobs:
toolchain: ${{ env.rust_nightly }}
- uses: Swatinem/rust-cache@v2
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
uses: taiki-e/install-action@v2
with:
tool: cargo-hack
- name: "check --all-features -Z minimal-versions"
run: |
# Remove dev-dependencies from Cargo.toml to prevent the next `cargo update`
Expand Down Expand Up @@ -475,10 +480,10 @@ jobs:
- macos-latest
steps:
- uses: actions/checkout@v3
- name: Install Rust ${{ env.rust_stable }}
- name: Install Rust 1.65.0
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_stable }}
toolchain: 1.65.0
- uses: Swatinem/rust-cache@v2
- name: Test hyper
run: |
Expand Down Expand Up @@ -542,8 +547,9 @@ jobs:

# Install dependencies
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack

uses: taiki-e/install-action@v2
with:
tool: cargo-hack
- name: Install wasm32-wasi target
run: rustup target add wasm32-wasi

Expand Down
47 changes: 47 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions tokio/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,16 @@ wasm32-wasi target is given unstable support for the `net` feature.
[#4956]: https://github.com/tokio-rs/tokio/pull/4956
[#4959]: https://github.com/tokio-rs/tokio/pull/4959

# 1.20.6 (September 22, 2023)

This is a backport of a change from 1.27.0.

### Changed

- io: use `memchr` from `libc` ([#5960])

[#5960]: https://github.com/tokio-rs/tokio/pull/5960

# 1.20.5 (May 28, 2023)

Forward ports 1.18.6 changes.
Expand Down
3 changes: 1 addition & 2 deletions tokio/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ full = [
]

fs = []
io-util = ["memchr", "bytes"]
io-util = ["bytes"]
# stdin, stdout, stderr
io-std = []
macros = ["tokio-macros"]
Expand Down Expand Up @@ -103,7 +103,6 @@ pin-project-lite = "0.2.0"

# Everything else is optional...
bytes = { version = "1.0.0", optional = true }
memchr = { version = "2.2", optional = true }
mio = { version = "0.8.4", optional = true, default-features = false }
num_cpus = { version = "1.8.0", optional = true }
parking_lot = { version = "0.12.0", optional = true }
Expand Down
1 change: 1 addition & 0 deletions tokio/src/future/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ cfg_sync! {

cfg_trace! {
mod trace;
#[allow(unused_imports)]
pub(crate) use trace::InstrumentedFuture as Future;
}

Expand Down
1 change: 1 addition & 0 deletions tokio/src/io/util/read_until.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use crate::io::AsyncBufRead;
use crate::util::memchr;

use pin_project_lite::pin_project;
use std::future::Future;
Expand Down
74 changes: 74 additions & 0 deletions tokio/src/util/memchr.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
//! Search for a byte in a byte array using libc.
//!
//! When nothing pulls in libc, then just use a trivial implementation. Note
//! that we only depend on libc on unix.

#[cfg(not(all(unix, feature = "libc")))]
pub(crate) fn memchr(needle: u8, haystack: &[u8]) -> Option<usize> {
haystack.iter().position(|val| needle == *val)
}

#[cfg(all(unix, feature = "libc"))]
pub(crate) fn memchr(needle: u8, haystack: &[u8]) -> Option<usize> {
let start = haystack.as_ptr();

// SAFETY: `start` is valid for `haystack.len()` bytes.
let ptr = unsafe { libc::memchr(start.cast(), needle as _, haystack.len()) };

if ptr.is_null() {
None
} else {
Some(ptr as usize - start as usize)
}
}

#[cfg(test)]
mod tests {
use super::memchr;

#[test]
fn memchr_test() {
let haystack = b"123abc456\0\xffabc\n";

assert_eq!(memchr(b'1', haystack), Some(0));
assert_eq!(memchr(b'2', haystack), Some(1));
assert_eq!(memchr(b'3', haystack), Some(2));
assert_eq!(memchr(b'4', haystack), Some(6));
assert_eq!(memchr(b'5', haystack), Some(7));
assert_eq!(memchr(b'6', haystack), Some(8));
assert_eq!(memchr(b'7', haystack), None);
assert_eq!(memchr(b'a', haystack), Some(3));
assert_eq!(memchr(b'b', haystack), Some(4));
assert_eq!(memchr(b'c', haystack), Some(5));
assert_eq!(memchr(b'd', haystack), None);
assert_eq!(memchr(b'A', haystack), None);
assert_eq!(memchr(0, haystack), Some(9));
assert_eq!(memchr(0xff, haystack), Some(10));
assert_eq!(memchr(0xfe, haystack), None);
assert_eq!(memchr(1, haystack), None);
assert_eq!(memchr(b'\n', haystack), Some(14));
assert_eq!(memchr(b'\r', haystack), None);
}

#[test]
fn memchr_all() {
let mut arr = Vec::new();
for b in 0..=255 {
arr.push(b);
}
for b in 0..=255 {
assert_eq!(memchr(b, &arr), Some(b as usize));
}
arr.reverse();
for b in 0..=255 {
assert_eq!(memchr(b, &arr), Some(255 - b as usize));
}
}

#[test]
fn memchr_empty() {
for b in 0..=255 {
assert_eq!(memchr(b, b""), None);
}
}
}
3 changes: 3 additions & 0 deletions tokio/src/util/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,3 +76,6 @@ cfg_rt_multi_thread! {
pub(crate) mod trace;

pub(crate) mod error;

#[cfg(feature = "io-util")]
pub(crate) mod memchr;

0 comments on commit 60a0ca5

Please sign in to comment.