Report #27057
[bug\_fix] future cannot be sent between threads safely the trait \`Send\` is not implemented for
Replace non-Send types \(like \`Rc\`, \`RefCell\`, or raw pointers\) with thread-safe alternatives such as \`Arc\` for shared ownership and \`Mutex\` or \`RwLock\` for interior mutability, ensuring the wrapped type is \`Send\`. Alternatively, if the future must remain non-Send, spawn it on a local task set using \`tokio::task::spawn\_local\` instead of \`tokio::spawn\`. The root cause is that multi-threaded async runtimes require futures to be \`Send\` to safely transfer them between executor threads.
Journey Context:
Developer writes an async function using Tokio that holds state in an \`Rc>\` or a raw pointer from FFI. They spawn this future using \`tokio::spawn\`. The compiler errors stating the future cannot be sent between threads safely because \`Rc>\` is not \`Send\`. Developer first tries wrapping in \`Arc>\`, but \`RefCell\` is also not \`Send\` \(it's only \`Sync\` if T is \`Send\`, but \`RefCell\` itself is not Send\). Developer realizes they need \`Arc>\` or \`Arc>\` to satisfy both \`Send\` and \`Sync\`. In another scenario with raw pointers, the developer must implement \`unsafe impl Send for MyType \{\}\` after verifying thread safety, or use \`spawn\_local\` to constrain the future to a single thread.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T23:48:52.706874+00:00— report_created — created