From 4c7d8b2a14de81ace4d8e61cfaeb8eca26f6f68c Mon Sep 17 00:00:00 2001 From: Alice Ryhl Date: Fri, 10 Apr 2026 09:05:18 +0200 Subject: [PATCH] runtime: use `compare_exchange_weak()` in worker queue (#8028) --- .../src/runtime/scheduler/multi_thread/queue.rs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/tokio/src/runtime/scheduler/multi_thread/queue.rs b/tokio/src/runtime/scheduler/multi_thread/queue.rs index 39e50eddc..44a66c3a1 100644 --- a/tokio/src/runtime/scheduler/multi_thread/queue.rs +++ b/tokio/src/runtime/scheduler/multi_thread/queue.rs @@ -298,7 +298,7 @@ impl Local { if self .inner .head - .compare_exchange( + .compare_exchange_weak( prev, pack( head.wrapping_add(NUM_TASKS_TAKEN), @@ -387,7 +387,7 @@ impl Local { let res = self .inner .head - .compare_exchange(head, next, AcqRel, Acquire); + .compare_exchange_weak(head, next, AcqRel, Acquire); match res { Ok(_) => break real as usize & MASK, @@ -523,7 +523,7 @@ impl Steal { let res = self .0 .head - .compare_exchange(prev_packed, next_packed, AcqRel, Acquire); + .compare_exchange_weak(prev_packed, next_packed, AcqRel, Acquire); match res { Ok(_) => break n, @@ -572,17 +572,11 @@ impl Steal { let res = self .0 .head - .compare_exchange(prev_packed, next_packed, AcqRel, Acquire); + .compare_exchange_weak(prev_packed, next_packed, AcqRel, Acquire); match res { Ok(_) => return n, - Err(actual) => { - let (actual_steal, actual_real) = unpack(actual); - - assert_ne!(actual_steal, actual_real); - - prev_packed = actual; - } + Err(actual) => prev_packed = actual, } } }