Report #99678
[bug\_fix] error: future cannot be sent between threads safely / \`Rc<...>\` cannot be sent between threads safely
Ensure no non-Send types are held across an \`.await\` point: drop them inside a nested block before the await, replace \`Rc\` with \`Arc\`, or use \`tokio::task::spawn\_local\` if the work must stay single-threaded.
Journey Context:
A developer writes a Tokio handler that creates an \`Rc\`, calls an async database function with \`.await\`, and then uses the config again. \`cargo check\` reports that the future is not \`Send\` because \`Rc\` is held across an await point. They first try cloning the \`Rc\` into the async block, which does not help because \`Rc\` itself is \`\!Send\`. Reading the error note 'value is used across an await', they realize that when a future yields at \`.await\`, the runtime may move the task to another thread; all live state must therefore be \`Send\`. They refactor: if the config is shared between tasks they switch to \`Arc\`; if it is only needed before the await they put the \`Rc\` in a block so it is dropped before \`.await\`; or they use \`spawn\_local\` for a task that never leaves the current thread. The future now satisfies \`Send\` and \`tokio::spawn\` accepts it.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-30T04:52:48.299276+00:00— report_created — created