Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,7 @@ R-loom-multi-thread:
- tokio/src/runtime/scheduler/multi_thread/**
- tokio/src/runtime/task/*
- tokio/src/runtime/task/**

R-loom-util-sync:
- tokio-util/src/sync/*
- tokio-util/src/sync/**/*
16 changes: 16 additions & 0 deletions .github/workflows/loom.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,19 @@ jobs:
working-directory: tokio
env:
SCOPE: ${{ matrix.scope }}

loom-util-sync:
name: loom tokio-util::sync
# base_ref is null when it's not a pull request
if: github.repository_owner == 'tokio-rs' && (contains(github.event.pull_request.labels.*.name, 'R-loom-util-sync') || (github.base_ref == null))
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Install Rust ${{ env.rust_stable }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_stable }}
- uses: Swatinem/rust-cache@v2
- name: run tests
run: cargo test --lib --release --features full -- --nocapture sync::tests
working-directory: tokio-util
12 changes: 8 additions & 4 deletions tokio-stream/src/wrappers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ cfg_sync! {
}

cfg_signal! {
#[cfg(unix)]
#[cfg(all(unix, not(loom)))]
mod signal_unix;
#[cfg(unix)]
#[cfg(all(unix, not(loom)))]
pub use signal_unix::SignalStream;

#[cfg(any(windows, docsrs))]
Expand All @@ -39,12 +39,14 @@ cfg_time! {
}

cfg_net! {
#[cfg(not(loom))]
mod tcp_listener;
#[cfg(not(loom))]
pub use tcp_listener::TcpListenerStream;

#[cfg(unix)]
#[cfg(all(unix, not(loom)))]
mod unix_listener;
#[cfg(unix)]
#[cfg(all(unix, not(loom)))]
pub use unix_listener::UnixListenerStream;
}

Expand All @@ -57,6 +59,8 @@ cfg_io_util! {
}

cfg_fs! {
#[cfg(not(loom))]
mod read_dir;
#[cfg(not(loom))]
pub use read_dir::ReadDirStream;
}
3 changes: 3 additions & 0 deletions tokio-util/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ futures-test = "0.3.5"
parking_lot = "0.12.0"
tempfile = "3.1.0"

[target.'cfg(loom)'.dev-dependencies]
loom = { version = "0.7", features = ["futures", "checkpoint"] }

[package.metadata.docs.rs]
all-features = true
# enable unstable features in the documentation
Expand Down
10 changes: 9 additions & 1 deletion tokio-util/src/loom.rs
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
pub(crate) use std::sync;
//! This module abstracts over `loom` and `std::sync` types depending on whether we
//! are running loom tests or not.

pub(crate) mod sync {
#[cfg(all(test, loom))]
pub(crate) use loom::sync::{Arc, Mutex, MutexGuard};
#[cfg(not(all(test, loom)))]
pub(crate) use std::sync::{Arc, Mutex, MutexGuard};
}
2 changes: 2 additions & 0 deletions tokio-util/src/net/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#![cfg(not(loom))]

//! TCP/UDP/Unix helpers for tokio.

use crate::either::Either;
Expand Down
3 changes: 3 additions & 0 deletions tokio-util/src/sync/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ pub use poll_semaphore::PollSemaphore;

mod reusable_box;
pub use reusable_box::ReusableBoxFuture;

#[cfg(test)]
mod tests;
3 changes: 3 additions & 0 deletions tokio-util/src/sync/tests/loom_cancellation_token.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ fn drop_token_no_child() {
});
}

#[ignore]
#[test]
fn drop_token_with_children() {
loom::model(|| {
Expand All @@ -125,6 +126,7 @@ fn drop_token_with_children() {
});
}

#[ignore]
#[test]
fn drop_and_cancel_token() {
loom::model(|| {
Expand All @@ -150,6 +152,7 @@ fn drop_and_cancel_token() {
});
}

#[ignore]
#[test]
fn cancel_parent_and_child() {
loom::model(|| {
Expand Down
3 changes: 2 additions & 1 deletion tokio-util/src/sync/tests/mod.rs
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@

#[cfg(loom)]
mod loom_cancellation_token;
2 changes: 2 additions & 0 deletions tokio-util/src/udp/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#![cfg(not(loom))]

//! UDP framing

mod frame;
Expand Down
1 change: 1 addition & 0 deletions tokio-util/tests/udp.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#![warn(rust_2018_idioms)]
#![cfg(not(target_os = "wasi"))] // Wasi doesn't support UDP
#![cfg(not(miri))] // No `socket` in Miri.
#![cfg(not(loom))] // No udp / UdpFramed in loom

use tokio::net::UdpSocket;
use tokio_stream::StreamExt;
Expand Down
Loading