diff --git a/crossbeam-channel/src/context.rs b/crossbeam-channel/src/context.rs index 7467b802c..7037f8344 100644 --- a/crossbeam-channel/src/context.rs +++ b/crossbeam-channel/src/context.rs @@ -138,21 +138,6 @@ impl Context { /// If the deadline is reached, `Selected::Aborted` will be selected. #[inline] pub fn wait_until(&self, deadline: Option) -> Selected { - // Spin for a short time, waiting until an operation is selected. - let backoff = Backoff::new(); - loop { - let sel = Selected::from(self.inner.select.load(Ordering::Acquire)); - if sel != Selected::Waiting { - return sel; - } - - if backoff.is_completed() { - break; - } else { - backoff.snooze(); - } - } - loop { // Check whether an operation has been selected. let sel = Selected::from(self.inner.select.load(Ordering::Acquire)); diff --git a/crossbeam-utils/src/backoff.rs b/crossbeam-utils/src/backoff.rs index bd85dc607..9b8b91757 100644 --- a/crossbeam-utils/src/backoff.rs +++ b/crossbeam-utils/src/backoff.rs @@ -2,8 +2,9 @@ use crate::primitive::hint; use core::cell::Cell; use core::fmt; -const SPIN_LIMIT: u32 = 6; -const YIELD_LIMIT: u32 = 10; +// https://github.com/oneapi-src/oneTBB/blob/v2021.5.0/include/oneapi/tbb/detail/_utils.h#L46-L48 +const SPIN_LIMIT: u32 = 4; +const YIELD_LIMIT: u32 = 6; /// Performs exponential backoff in spin loops. ///