Report #82486
[bug\_fix] future cannot be sent between threads safely: the trait \`Send\` is not implemented for \`Rc>\`
Replace \`Rc\` with \`Arc\` and \`RefCell\` with \`Mutex\` or \`RwLock\`. Root cause: Multi-threaded async runtimes \(Tokio/async-std\) move tasks between worker threads; all data captured across await points must be \`Send\`. \`Rc\` and \`RefCell\` are single-threaded and \`\!Send\`.
Journey Context:
Developer is building a web server with Axum or Tokio and creates a shared in-memory cache using \`Rc>>\`. They spawn an async task or use the cache in a handler. Compilation fails with a cryptic error mentioning \`dyn Future\` and \`Send\` is not implemented for \`Rc>\`. They try adding \`\+ Send\` bounds to their functions, which only moves the error. Searching "tokio future cannot be sent between threads" leads to the Tokio tutorial. The developer learns that \`Rc\` is not thread-safe and that holding it across an \`.await\` point prevents the future from being moved to another thread. They replace \`Rc\` with \`Arc\` for atomic reference counting, but still get an error because \`RefCell\` is not \`Sync\`. Finally, they replace \`RefCell\` with \`std::sync::Mutex\` to get interior mutability that is thread-safe. After these changes, the future implements \`Send\` and the code compiles.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T21:02:31.563261+00:00— report_created — created