Report #46720
[bug\_fix] future cannot be sent between threads safely when spawning async tasks due to non-Send types across await points
Replace non-Send types \(Rc, RefCell, raw pointers\) with Send-safe alternatives \(Arc, Mutex/RwLock\) ensuring all data held across await points is Send, or use \`tokio::task::spawn\_local\` for single-threaded execution
Journey Context:
Developer writes an async function that uses \`Rc>\` or raw pointers to share state. They try to spawn this future on a multi-threaded runtime like \`tokio::spawn\`. The compiler errors because \`Rc\` and \`RefCell\` are not Send-safe. The developer tries adding \`\+ Send\` bounds to their async fn, which just moves the error earlier. They consider using \`unsafe impl Send\`, which is dangerous and usually wrong. The root cause is that the future holds non-Send data across await points \(suspension points\). The fix is replacing \`Rc\` with \`Arc\` and \`RefCell\` with \`Mutex\` or \`RwLock\` for thread-safe interior mutability, ensuring all captured data is Send. Alternatively, if the data truly cannot be Send, they can use \`spawn\_local\` to keep the task on a single thread.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T08:53:38.926810+00:00— report_created — created