Rust errors / Build and Cargo
Rust build error · checked with Rust 1.99.0
error: future cannot be sent between threads safely
error: future cannot be sent between threads safely
What it meanstokio::spawn needs a future that can move between threads (Send). Something not thread-safe, often a std MutexGuard or an Rc, is held across an .await.
Why it happens
- Holding a std::sync::MutexGuard across .await.
- Keeping an Rc, RefCell borrow or raw pointer alive across .await.
How to fix it
1. Drop the guard before awaiting
Scope it so it ends before the await.
let value = {
let g = state.lock().unwrap();
g.clone()
}; // guard dropped here
send(value).await;2. Use tokio's Mutex when you must hold it across await
let g = state.lock().await; // tokio::sync::Mutex3. Use Arc instead of Rc
let shared = std::sync::Arc::new(data);Other wordings of this error
future cannot be sent between threads safely, future is not Send, has type which is not Send, MutexGuard is not Send tokio spawn
Other build errors
- error: linker `link.exe` not found
- error: linker `cc` not found
- error: failed to run custom build command for `openssl-sys`
- error: failed to select a version for the requirement
- error: failed to select a version for `libsqlite3-sys`... the package `libsqlite3-sys` lin
- error: could not compile `my-crate` (bin "my-crate") due to 1 previous error
- error: package `foo v1.2.3` cannot be built because it requires rustc 1.80 or newer, while
- feature `edition2024` is required
Up next
Find the right pagePaste any Rust errorCompiler codes and build errors in one finder.Read it next →Also worth your time
Did this answer your question?