Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
8605e00
Revert "ci: Work around sanitizer-related regression"
taiki-e Feb 15, 2026
d514c6b
Revert "ci: Work around sanitizer issue on latest Linux kernel"
taiki-e Feb 15, 2026
4c5a479
ci: Apply zizmor
taiki-e Apr 6, 2026
62779a7
ci: Use x86_64-unknown-linux-gnu{a,m,t}san for {A,M,T}SAN
taiki-e Apr 6, 2026
6bf0bb0
ci: Avoid unused_features warning in cargo bench
taiki-e Apr 6, 2026
3b37e38
Fix unsound `Send` impl for `IterPinRef` and `Iter` (#3003)
paolobarbolini Apr 12, 2026
026548c
Update spin requirement from 0.10.0 to 0.12.0 (#3014)
dependabot[bot] Jun 4, 2026
bfc8aa0
Re-export alloc::task::Wake (#3010)
lms0806 Jun 4, 2026
1f059d2
Fix memory leak in `FuturesUnordered::IntoIter` (#3005)
paolobarbolini Jun 4, 2026
0174ecb
docs: remove repeated word in AllowStdIo summary (#3017)
iamlockon Jun 24, 2026
cf5d2ab
Fix ReadLine's soundness issue regarding to exception safety (#3020)
Evian-Zhang Jul 5, 2026
7844a1e
Allow deprecated Atomic::fetch_update
stbuehler Jul 12, 2026
b4675e6
clippy: remove the redundant `&`
stbuehler Jul 12, 2026
4bd158e
clippy: use `clear()` instead of truncating to zero length
stbuehler Jul 12, 2026
6b6a615
Add portable-atomic-alloc feature and use it in FuturesUnordered (#3007)
tommasoclini Jul 12, 2026
876c8e2
Fix unsound compat01as03 implementation (fixes #2514) (#3012)
stbuehler Jul 18, 2026
77b0380
Simplify target_has_atomic cfg in utility crates
taiki-e Jul 18, 2026
943c2df
Enable Miri for more tests
taiki-e Jul 18, 2026
b05972a
ci: Cleanup
taiki-e Jul 18, 2026
75dcb29
Resolve rustdoc::redundant_explicit_links warning
taiki-e Jul 18, 2026
1a5880e
Resolve rustdoc ambiguous link error
taiki-e Jul 18, 2026
ad999e0
Resolve rustdoc::broken_intra_doc_links warning
taiki-e Jul 18, 2026
42a561c
ci: Update release workflow
taiki-e Jul 18, 2026
bf71c5a
Release 0.3.33
taiki-e Jul 18, 2026
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
20 changes: 20 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
version: 2
updates:
- package-ecosystem: cargo
directory: /
schedule:
interval: weekly
cooldown:
default-days: 14 # Note: Unless dependencies are pinned/locked, the effect is limited.
commit-message:
prefix: ''
labels: []
- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
cooldown:
default-days: 14
commit-message:
prefix: ''
labels: []
173 changes: 85 additions & 88 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
name: CI

permissions:
contents: read
permissions: {}

on:
pull_request:
Expand Down Expand Up @@ -29,6 +28,15 @@ concurrency:
cancel-in-progress: true

jobs:
# This branch no longer actively developed. Most commits to this
# branch are backporting and should not be blocked by clippy.
# clippy:
# uses: taiki-e/github-actions/.github/workflows/rust-clippy.yml@e6a1170cbd07eb898017958967912976fce18f2d # 2026.7.3
# with:
# implicit_provenance_casts: false # TODO
docs:
uses: taiki-e/github-actions/.github/workflows/rust-docs.yml@e6a1170cbd07eb898017958967912976fce18f2d # 2026.7.3

test:
name: cargo test
strategy:
Expand All @@ -50,10 +58,13 @@ jobs:
runs-on: ${{ matrix.os }}
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- name: Install Rust
uses: taiki-e/github-actions/install-rust@nightly
- uses: taiki-e/setup-cross-toolchain-action@v1
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
tool: rust@nightly
fallback: none
- uses: taiki-e/setup-cross-toolchain-action@3d9770ce98eb7dbcf378563182a5e8031165f75b # v1.41.0
with:
target: ${{ matrix.target }}
if: matrix.target != ''
Expand All @@ -71,15 +82,14 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- name: Install Rust
uses: taiki-e/github-actions/install-rust@main
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- name: Install Rust and cargo-hack
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
toolchain: ${{ matrix.rust }}
# cargo does not support for --features/--no-default-features with workspace, so use cargo-hack instead.
# Refs: cargo#3620, cargo#4106, cargo#4463, cargo#4753, cargo#5015, cargo#5364, cargo#6195
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
# cargo does not support for --features/--no-default-features with workspace, so use cargo-hack instead.
# Refs: cargo#3620, cargo#4106, cargo#4463, cargo#4753, cargo#5015, cargo#5364, cargo#6195
tool: rust@${{ matrix.rust }},cargo-hack
fallback: none
# remove dev-dependencies to avoid https://github.com/rust-lang/cargo/issues/4866
- run: cargo hack --remove-dev-deps --workspace
# Check no-default-features
Expand Down Expand Up @@ -108,13 +118,12 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- name: Install Rust
uses: taiki-e/github-actions/install-rust@main
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- name: Install Rust and cargo-hack
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
toolchain: ${{ matrix.rust }}
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
tool: rust@${{ matrix.rust }},cargo-hack
fallback: none
# remove dev-dependencies to avoid https://github.com/rust-lang/cargo/issues/4866
- run: cargo hack --remove-dev-deps --workspace
# Check default features
Expand Down Expand Up @@ -143,13 +152,12 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- name: Install Rust
uses: taiki-e/github-actions/install-rust@main
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- name: Install Rust and cargo-hack
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
toolchain: ${{ matrix.rust }}
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
tool: rust@${{ matrix.rust }},cargo-hack
fallback: none
- run: cargo hack build --workspace --no-dev-deps
- run: cargo build --tests --features default,thread-pool,io-compat --manifest-path futures/Cargo.toml

Expand All @@ -158,13 +166,12 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- name: Install Rust
uses: taiki-e/github-actions/install-rust@nightly
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- name: Install cargo-minimal-versions
uses: taiki-e/install-action@cargo-minimal-versions
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- name: Install Rust, cargo-hack, and cargo-minimal-versions
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
tool: rust@nightly,cargo-hack,cargo-minimal-versions
fallback: none
- run: cargo minimal-versions build --workspace --ignore-private --all-features

no-std:
Expand All @@ -180,13 +187,12 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- name: Install Rust
uses: taiki-e/github-actions/install-rust@nightly
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- name: Install Rust and cargo-hack
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
target: ${{ matrix.target }}
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
tool: rust@nightly+${{ matrix.target }},cargo-hack
fallback: none
# remove dev-dependencies to avoid https://github.com/rust-lang/cargo/issues/4866
- run: cargo hack --remove-dev-deps --workspace
- run: |
Expand Down Expand Up @@ -214,22 +220,25 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- name: Install Rust
uses: taiki-e/github-actions/install-rust@nightly
- run: cargo bench --workspace
- run: cargo bench --manifest-path futures-util/Cargo.toml --features=bilock,unstable
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
tool: rust@nightly
fallback: none
- run: cargo bench --workspace --all-features

features:
name: cargo hack check --feature-powerset
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- name: Install Rust
uses: taiki-e/github-actions/install-rust@nightly
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- name: Install Rust and cargo-hack
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
tool: rust@nightly,cargo-hack
fallback: none
# Check each specified feature works properly
# * `--feature-powerset` - run for the feature powerset of the package
# * `--depth 2` - limit the max number of simultaneous feature flags of `--feature-powerset`
Expand All @@ -248,11 +257,12 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- name: Install Rust
uses: taiki-e/github-actions/install-rust@nightly
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
component: miri
tool: rust@nightly+miri
fallback: none
- run: cargo miri test --workspace --all-features -- --skip panic_on_drop_fut
env:
MIRIFLAGS: -Zmiri-strict-provenance -Zmiri-symbolic-alignment-check -Zmiri-disable-isolation
Expand All @@ -276,53 +286,40 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- run: |
printf 'TARGET=x86_64-unknown-linux-gnuasan\n' >>"${GITHUB_ENV}"
printf 'ASAN_OPTIONS=detect_stack_use_after_return=1\n' >>"${GITHUB_ENV}"
if: matrix.sanitizer == 'address'
- run: |
printf 'TARGET=x86_64-unknown-linux-gnumsan\n' >>"${GITHUB_ENV}"
if: matrix.sanitizer == 'memory'
- run: |
printf 'TARGET=x86_64-unknown-linux-gnutsan\n' >>"${GITHUB_ENV}"
if: matrix.sanitizer == 'thread'
- name: Install Rust
uses: taiki-e/github-actions/install-rust@nightly
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
component: rust-src
# https://github.com/google/sanitizers/issues/1716 / https://github.com/actions/runner-images/issues/9491
- run: sudo sysctl vm.mmap_rnd_bits=28
# Exclude futures-macro to work around upstream bug since nightly-2024-10-06.
- run: cargo -Z build-std test --workspace --all-features --target x86_64-unknown-linux-gnu --lib --tests --exclude futures-macro -- --skip panic_on_drop_fut
tool: rust@stable+${{ env.TARGET }}
fallback: none
- run: cargo test --workspace --all-features --target x86_64-unknown-linux-gnu --lib --tests -- --skip panic_on_drop_fut
env:
# TODO: Once `cfg(sanitize = "..")` is stable, replace
# `cfg(futures_sanitizer)` with `cfg(sanitize = "..")` and remove
# `--cfg futures_sanitizer`.
RUSTFLAGS: -D warnings -Z sanitizer=${{ matrix.sanitizer }} --cfg futures_sanitizer

# This branch no longer actively developed. Most commits to this
# branch are backporting and should not be blocked by clippy.
# clippy:
# name: cargo clippy
# runs-on: ubuntu-latest
# timeout-minutes: 60
# steps:
# - uses: taiki-e/checkout-action@v1
# - name: Install Rust
# uses: taiki-e/github-actions/install-rust@nightly
# with:
# component: clippy
# - run: cargo clippy --workspace --all-features --all-targets
RUSTFLAGS: ${{ env.RUSTFLAGS }} --cfg futures_sanitizer

fmt:
name: cargo fmt
tidy:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- name: Install Rust
uses: taiki-e/github-actions/install-rust@stable
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- name: Install Rust and zizmor
uses: taiki-e/install-action@b8cecb83565409bcc297b2df6e77f030b2a468d5 # v2.82.0
with:
tool: rust@stable+rustfmt,zizmor
fallback: none
- run: cargo fmt --all -- --check

docs:
name: cargo doc
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: taiki-e/checkout-action@v1
- name: Install Rust
uses: taiki-e/github-actions/install-rust@nightly
- run: cargo doc --workspace --no-deps --all-features
- run: zizmor . -q --strict-collection
env:
RUSTDOCFLAGS: ${{ env.RUSTDOCFLAGS }} --cfg docsrs
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
8 changes: 6 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
name: Release

permissions: {}

on:
push:
tags:
Expand All @@ -9,9 +11,11 @@ jobs:
create-release:
if: github.repository_owner == 'rust-lang'
runs-on: ubuntu-latest
permissions:
contents: write # for taiki-e/create-gh-release-action
steps:
- uses: taiki-e/checkout-action@v1
- uses: taiki-e/create-gh-release-action@v1
- uses: taiki-e/checkout-action@7d1e50e93dc4fb3bba58f85018fadf77898aee8b # v1.4.2
- uses: taiki-e/create-gh-release-action@eba8ea96c86cca8a37f1b56e94b4d13301fba651 # v1.11.0
with:
changelog: CHANGELOG.md
branch: 'master|[0-9]+\.[0-9]+'
Expand Down
6 changes: 6 additions & 0 deletions .github/zizmor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# zizmor configuration
# https://docs.zizmor.sh/configuration/

rules:
anonymous-definition: { disable: true }
dependabot-cooldown: { config: { days: 14 } }
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ Releases may yanked if there is a security bug, a soundness bug, or a regression
Note: In this file, do not use the hard wrap in the middle of a sentence for compatibility with GitHub comment style markdown rendering.
-->

# 0.3.33 - 2026-07-18

* Fix `ReadLine`'s soundness issue regarding to exception safety. (#3020)
* Fix unsound `Send` impl for `IterPinRef` and `Iter`. (#3003)
* Fix stacked borrows violation in `compat01as03` implementation. (#3012)
* Fix memory leak in `FuturesUnordered::IntoIter`. (#3005)
* Add `portable-atomic-alloc` feature and use it in `FuturesUnordered`. (#3007)
* Re-export `alloc::task::Wake`. (#3010)
* Update `spin` to 0.12. (#3014)

# 0.3.32 - 2026-02-15

* Bump MSRV of utility crates to 1.71. (#2989)
Expand Down
6 changes: 3 additions & 3 deletions futures-channel/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "futures-channel"
version = "0.3.32"
version = "0.3.33"
edition = "2018"
# NB: Sync with "Usage" section in README.md and util-msrv job in .github/workflows/ci.yml
rust-version = "1.71"
Expand All @@ -23,8 +23,8 @@ unstable = []
cfg-target-has-atomic = []

[dependencies]
futures-core = { path = "../futures-core", version = "0.3.32", default-features = false }
futures-sink = { path = "../futures-sink", version = "0.3.32", default-features = false, optional = true }
futures-core = { path = "../futures-core", version = "0.3.33", default-features = false }
futures-sink = { path = "../futures-sink", version = "0.3.33", default-features = false, optional = true }

[dev-dependencies]
futures = { path = "../futures", default-features = true }
Expand Down
8 changes: 4 additions & 4 deletions futures-channel/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@
))]
#![warn(missing_docs, unsafe_op_in_unsafe_fn)]

#[cfg_attr(target_os = "none", cfg(target_has_atomic = "ptr"))]
#[cfg(target_has_atomic = "ptr")]
#[cfg(feature = "alloc")]
extern crate alloc;
#[cfg(feature = "std")]
extern crate std;

#[cfg_attr(target_os = "none", cfg(target_has_atomic = "ptr"))]
#[cfg(target_has_atomic = "ptr")]
#[cfg(feature = "alloc")]
mod lock;
#[cfg_attr(target_os = "none", cfg(target_has_atomic = "ptr"))]
#[cfg(target_has_atomic = "ptr")]
#[cfg(feature = "std")]
pub mod mpsc;
#[cfg_attr(target_os = "none", cfg(target_has_atomic = "ptr"))]
#[cfg(target_has_atomic = "ptr")]
#[cfg(feature = "alloc")]
pub mod oneshot;
3 changes: 1 addition & 2 deletions futures-channel/tests/mpsc-close.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,10 +148,9 @@ fn single_receiver_drop_closes_channel_and_drains() {

// Stress test that `try_send()`s occurring concurrently with receiver
// close/drops don't appear as successful sends.
#[cfg_attr(miri, ignore)] // Miri is too slow
#[test]
fn stress_try_send_as_receiver_closes() {
const AMT: usize = 10000;
const AMT: usize = if cfg!(miri) { 100 } else { 10000 };
// To provide variable timing characteristics (in the hopes of
// reproducing the collision that leads to a race), we busy-re-poll
// the test MPSC receiver a variable number of times before actually
Expand Down
Loading