From 484cb52d8d21cb8156decbeba9569651fcc09d0d Mon Sep 17 00:00:00 2001 From: KR-bluejay Date: Sat, 18 Oct 2025 19:57:07 +0900 Subject: [PATCH 1/4] sync: return `TryRecvError::Disconnected` from `Receiver::try_recv` after `Receiver::close` (#7686) (cherry picked from commit d060401f6c7dca4a20674e3ad63ad7f1b228aa31) --- tokio/src/sync/mpsc/chan.rs | 4 ++++ tokio/src/sync/mpsc/list.rs | 6 ++++++ tokio/tests/sync_broadcast.rs | 4 +--- tokio/tests/sync_mpsc.rs | 9 +++++++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/tokio/src/sync/mpsc/chan.rs b/tokio/src/sync/mpsc/chan.rs index f4cedf0d4..66c90261a 100644 --- a/tokio/src/sync/mpsc/chan.rs +++ b/tokio/src/sync/mpsc/chan.rs @@ -439,6 +439,10 @@ impl Rx { return Ok(value); } TryPopResult::Closed => return Err(TryRecvError::Disconnected), + // If close() was called, an empty queue should report Disconnected. + TryPopResult::Empty if rx_fields.rx_closed => { + return Err(TryRecvError::Disconnected) + } TryPopResult::Empty => return Err(TryRecvError::Empty), TryPopResult::Busy => {} // fall through } diff --git a/tokio/src/sync/mpsc/list.rs b/tokio/src/sync/mpsc/list.rs index 90d9b828c..118bac856 100644 --- a/tokio/src/sync/mpsc/list.rs +++ b/tokio/src/sync/mpsc/list.rs @@ -35,8 +35,14 @@ pub(crate) enum TryPopResult { /// Successfully popped a value. Ok(T), /// The channel is empty. + /// + /// Note that `list.rs` only tracks the close state set by senders. If the + /// channel is closed by `Rx::close()`, then `TryPopResult::Empty` is still + /// returned, and the close state needs to be handled by `chan.rs`. Empty, /// The channel is empty and closed. + /// + /// Returned when the send half is closed (all senders dropped). Closed, /// The channel is not empty, but the first value is being written. Busy, diff --git a/tokio/tests/sync_broadcast.rs b/tokio/tests/sync_broadcast.rs index d485c6307..f7d2c8706 100644 --- a/tokio/tests/sync_broadcast.rs +++ b/tokio/tests/sync_broadcast.rs @@ -7,9 +7,7 @@ use wasm_bindgen_test::wasm_bindgen_test as test; use tokio::sync::broadcast; use tokio_test::task; -use tokio_test::{ - assert_err, assert_ok, assert_pending, assert_ready, assert_ready_err, assert_ready_ok, -}; +use tokio_test::{assert_err, assert_ok, assert_pending, assert_ready_err, assert_ready_ok}; use std::sync::Arc; diff --git a/tokio/tests/sync_mpsc.rs b/tokio/tests/sync_mpsc.rs index 638ced588..a89a3bee4 100644 --- a/tokio/tests/sync_mpsc.rs +++ b/tokio/tests/sync_mpsc.rs @@ -966,6 +966,15 @@ fn try_recv_unbounded() { } } +#[test] +fn try_recv_after_receiver_close() { + let (_tx, mut rx) = mpsc::channel::<()>(5); + + assert_eq!(Err(TryRecvError::Empty), rx.try_recv()); + rx.close(); + assert_eq!(Err(TryRecvError::Disconnected), rx.try_recv()); +} + #[test] fn try_recv_close_while_empty_bounded() { let (tx, mut rx) = mpsc::channel::<()>(5); From 601c383ab6def5a6d2f95a434c95a97b65059628 Mon Sep 17 00:00:00 2001 From: Martin Grigorov Date: Thu, 4 Dec 2025 10:52:29 +0200 Subject: [PATCH 2/4] ci: upgrade FreeBSD from 14.2 to 14.3 (#7758) 14.2 is no more available: ``` $ gcloud compute images list --project freebsd-org-cloud-dev --no-standard-images NAME PROJECT FAMILY DEPRECATED STATUS freebsd-13-5-release-amd64-gce freebsd-org-cloud-dev freebsd-13-5 READY freebsd-13-5-stable-amd64-v20251030 freebsd-org-cloud-dev freebsd-13-5-snap READY freebsd-13-5-stable-amd64-v20251107 freebsd-org-cloud-dev freebsd-13-5-snap READY freebsd-14-3-release-amd64-ufs-gce freebsd-org-cloud-dev freebsd-14-3 READY freebsd-14-3-stable-amd64-ufs-20251120 freebsd-org-cloud-dev freebsd-14-3-snap READY freebsd-14-3-stable-amd64-ufs-20251127 freebsd-org-cloud-dev freebsd-14-3-snap READY freebsd-14-3-stable-amd64-zfs-20251113 freebsd-org-cloud-dev freebsd-14-3-snap READY freebsd-14-3-stable-amd64-zfs-20251120 freebsd-org-cloud-dev freebsd-14-3-snap READY freebsd-14-3-stable-amd64-zfs-20251127 freebsd-org-cloud-dev freebsd-14-3-snap READY freebsd-15-0-release-amd64-ufs freebsd-org-cloud-dev freebsd-15-0-amd64-ufs READY freebsd-15-0-release-amd64-zfs freebsd-org-cloud-dev freebsd-15-0-amd64-zfs READY freebsd-15-0-stable-amd64-ufs-20251120 freebsd-org-cloud-dev freebsd-15-0-amd64-ufs-snap READY freebsd-15-0-stable-amd64-ufs-20251127 freebsd-org-cloud-dev freebsd-15-0-amd64-ufs-snap READY freebsd-15-0-stable-amd64-zfs-20251120 freebsd-org-cloud-dev freebsd-15-0-amd64-zfs-snap READY freebsd-15-0-stable-amd64-zfs-20251127 freebsd-org-cloud-dev freebsd-15-0-amd64-zfs-snap READY freebsd-16-0-current-amd64-ufs-20251110 freebsd-org-cloud-dev freebsd-16-0-snap READY freebsd-16-0-current-amd64-zfs-20251110 freebsd-org-cloud-dev freebsd-16-0-snap READY freebsd-16-0-current-arm64-aarch64-ufs-20251111 freebsd-org-cloud-dev freebsd-16-0-snap READY freebsd-16-0-current-arm64-aarch64-zfs-20251111 freebsd-org-cloud-dev freebsd-16-0-snap READY ``` (cherry picked from commit 5471a5835e8bc406c2adc2b66d3020c00ab6a685) --- .cirrus.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cirrus.yml b/.cirrus.yml index abf07ca48..d9dcdb328 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -1,7 +1,7 @@ only_if: $CIRRUS_TAG == '' && ($CIRRUS_PR != '' || $CIRRUS_BRANCH == 'master' || $CIRRUS_BRANCH =~ 'tokio-.*') auto_cancellation: $CIRRUS_BRANCH != 'master' && $CIRRUS_BRANCH !=~ 'tokio-.*' freebsd_instance: - image_family: freebsd-14-2 + image_family: freebsd-14-3 env: RUST_STABLE: stable RUST_NIGHTLY: nightly-2024-05-05 From 4a91f197b03dc335010fffcf0e0c14e1f4011b42 Mon Sep 17 00:00:00 2001 From: Qi Date: Wed, 24 Dec 2025 10:07:28 +0800 Subject: [PATCH 3/4] ci: fix wasm32-wasip1 tests (#7788) (cherry picked from commit 1b17a7e241989520704ce408045904bc2e275e3c) --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6503c0e64..81bd34d03 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1031,21 +1031,21 @@ jobs: run: cargo test -p tokio --target ${{ matrix.target }} --features full env: CARGO_TARGET_WASM32_WASIP1_RUNNER: "wasmtime run --" - CARGO_TARGET_WASM32_WASIP1_THREADS_RUNNER: "wasmtime run -W bulk-memory=y -W threads=y -S threads=y --" + CARGO_TARGET_WASM32_WASIP1_THREADS_RUNNER: "wasmtime run -W bulk-memory=y -W threads=y -W shared-memory=y -S threads=y --" RUSTFLAGS: --cfg tokio_unstable -Dwarnings -C target-feature=+atomics,+bulk-memory -C link-args=--max-memory=67108864 - name: WASI test tokio-util full run: cargo test -p tokio-util --target ${{ matrix.target }} --features full env: CARGO_TARGET_WASM32_WASIP1_RUNNER: "wasmtime run --" - CARGO_TARGET_WASM32_WASIP1_THREADS_RUNNER: "wasmtime run -W bulk-memory=y -W threads=y -S threads=y --" + CARGO_TARGET_WASM32_WASIP1_THREADS_RUNNER: "wasmtime run -W bulk-memory=y -W threads=y -W shared-memory=y -S threads=y --" RUSTFLAGS: --cfg tokio_unstable -Dwarnings -C target-feature=+atomics,+bulk-memory -C link-args=--max-memory=67108864 - name: WASI test tokio-stream run: cargo test -p tokio-stream --target ${{ matrix.target }} --features time,net,io-util,sync env: CARGO_TARGET_WASM32_WASIP1_RUNNER: "wasmtime run --" - CARGO_TARGET_WASM32_WASIP1_THREADS_RUNNER: "wasmtime run -W bulk-memory=y -W threads=y -S threads=y --" + CARGO_TARGET_WASM32_WASIP1_THREADS_RUNNER: "wasmtime run -W bulk-memory=y -W threads=y -W shared-memory=y -S threads=y --" RUSTFLAGS: --cfg tokio_unstable -Dwarnings -C target-feature=+atomics,+bulk-memory -C link-args=--max-memory=67108864 - name: test tests-integration --features wasi-rt @@ -1062,7 +1062,7 @@ jobs: if: matrix.target == 'wasm32-wasip1-threads' working-directory: tests-integration env: - CARGO_TARGET_WASM32_WASIP1_THREADS_RUNNER: "wasmtime run -W bulk-memory=y -W threads=y -S threads=y --" + CARGO_TARGET_WASM32_WASIP1_THREADS_RUNNER: "wasmtime run -W bulk-memory=y -W threads=y -W shared-memory=y -S threads=y --" RUSTFLAGS: --cfg tokio_unstable -Dwarnings -C target-feature=+atomics,+bulk-memory -C link-args=--max-memory=67108864 check-external-types: From dfb0f00838ca1986dee04a54a6299d35b0a4072c Mon Sep 17 00:00:00 2001 From: Qi Date: Sat, 3 Jan 2026 01:20:15 +0800 Subject: [PATCH 4/4] chore: prepare Tokio v1.43.4 (#7821) --- Cargo.lock | 2 +- README.md | 2 +- tokio/CHANGELOG.md | 8 ++++++++ tokio/Cargo.toml | 2 +- tokio/README.md | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 35c193819..1516133fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1390,7 +1390,7 @@ dependencies = [ [[package]] name = "tokio" -version = "1.43.3" +version = "1.43.4" dependencies = [ "async-stream", "backtrace", diff --git a/README.md b/README.md index f26c1d9e4..646288173 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Make sure you activated the full features of the tokio crate on Cargo.toml: ```toml [dependencies] -tokio = { version = "1.43.3", features = ["full"] } +tokio = { version = "1.43.4", features = ["full"] } ``` Then, on your main.rs: diff --git a/tokio/CHANGELOG.md b/tokio/CHANGELOG.md index 3ea19d2bc..4f539e0b3 100644 --- a/tokio/CHANGELOG.md +++ b/tokio/CHANGELOG.md @@ -1,3 +1,11 @@ +# 1.43.4 (January 3rd, 2026) + +### Fixed + +* sync: return `TryRecvError::Disconnected` from `Receiver::try_recv` after `Receiver::close` ([#7686]) + +[#7686]: https://github.com/tokio-rs/tokio/pull/7686 + # 1.43.3 (October 14th, 2025) ### Fixed diff --git a/tokio/Cargo.toml b/tokio/Cargo.toml index a87b9d77d..9cde5855d 100644 --- a/tokio/Cargo.toml +++ b/tokio/Cargo.toml @@ -6,7 +6,7 @@ name = "tokio" # - README.md # - Update CHANGELOG.md. # - Create "v1.x.y" git tag. -version = "1.43.3" +version = "1.43.4" edition = "2021" rust-version = "1.70" authors = ["Tokio Contributors "] diff --git a/tokio/README.md b/tokio/README.md index f26c1d9e4..646288173 100644 --- a/tokio/README.md +++ b/tokio/README.md @@ -56,7 +56,7 @@ Make sure you activated the full features of the tokio crate on Cargo.toml: ```toml [dependencies] -tokio = { version = "1.43.3", features = ["full"] } +tokio = { version = "1.43.4", features = ["full"] } ``` Then, on your main.rs: