From 605315a517d3db1f8cc6fcc000f2abbae1a88e90 Mon Sep 17 00:00:00 2001 From: William Wen Date: Tue, 14 May 2024 15:39:30 +0800 Subject: [PATCH] disable new feature for loom --- tokio/src/sync/oneshot.rs | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/tokio/src/sync/oneshot.rs b/tokio/src/sync/oneshot.rs index 6b8c5675a19..dfaadcf38a9 100644 --- a/tokio/src/sync/oneshot.rs +++ b/tokio/src/sync/oneshot.rs @@ -629,20 +629,29 @@ impl Sender { #[rustversion::since(1.70)] fn consume_inner(inner: Arc>) -> Result<(), T> { - if let Some(inner) = Arc::into_inner(inner) { - if let Some(t) = inner.value.with_mut(|ptr| unsafe { - // SAFETY: we have successfully returned with `Some`, which means we are the - // only accessor to `ptr`. - // - // Note: value can be `None` even though we have previously set it as `Some`, - // because the value may have been consumed by receiver before we reach here. - (*ptr).take() - }) { - Err(t) + #[cfg(not(loom))] + { + if let Some(inner) = Arc::into_inner(inner) { + if let Some(t) = inner.value.with_mut(|ptr| unsafe { + // SAFETY: we have successfully returned with `Some`, which means we are the + // only accessor to `ptr`. + // + // Note: value can be `None` even though we have previously set it as `Some`, + // because the value may have been consumed by receiver before we reach here. + (*ptr).take() + }) { + Err(t) + } else { + Ok(()) + } } else { Ok(()) } - } else { + } + + #[cfg(loom)] + { + // The `loom::sync::Arc` does not implement `into_inner` yet. Ok(()) } }