Report #62396
[bug\_fix] future cannot be sent between threads safely: the trait \`Send\` is not implemented for \`std::rc::Rc>\`
Replace \`Rc>\` with \`Arc>\` \(or \`Arc>\`\) to get thread-safe reference counting and interior mutability. If the data is truly thread-local and you don't need to send the future between threads, use \`tokio::task::LocalSet\` to spawn \!Send futures on a single thread, or use \`tokio::task::spawn\_local\`.
Journey Context:
You write an async function that holds shared state using \`Rc>\` to share mutable counter state between async tasks. You try to spawn this future on Tokio's multi-threaded runtime using \`tokio::spawn\`. The compiler errors that the future is not \`Send\` because \`Rc\` and \`RefCell\` are not thread-safe \(they use non-atomic reference counting and runtime borrow checking that is not thread-safe\). You try to wrap the \`Rc\` in an \`Arc\`, but the error persists because \`RefCell\` is also not \`Send\` \(it would allow mutable access from multiple threads\). You try to use a \`Mutex\` but struggle with the exact syntax for \`Arc>\`. Eventually you realize that \`Rc>\` must be replaced entirely with \`Arc>\` to allow the async task to be sent between threads in the Tokio work-stealing thread pool. If you don't need to send the task between threads \(e.g., it's a single-threaded async runtime\), you could use \`tokio::task::spawn\_local\` instead.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T11:13:04.536460+00:00— report_created — created