Skip to content

Instantly share code, notes, and snippets.

@moofone
Created January 12, 2020 18:09
Show Gist options
  • Save moofone/2dc6f5394a1acc088b8c627a166a17ee to your computer and use it in GitHub Desktop.
Save moofone/2dc6f5394a1acc088b8c627a166a17ee to your computer and use it in GitHub Desktop.
#[tokio::main(core_threads = 8)]
async fn main() -> io::Result<()> {
Server::start_stratum_server();
let addr = env::args()
.nth(1)
.unwrap_or_else(|| "127.0.0.1:8080".to_string());
println!("Hello, Rust Server. Listening on {}", addr);
let mut listener = TcpListener::bind(&addr).await?;
let sem = Arc::new(tokio::sync::Semaphore::new(10_000));
loop {
let permit = sem.acquire().await;
permit.forget();
let (socket, _) = listener.accept().await?;
let sem = sem.clone();
tokio::spawn(async move {
accept_connections();
drop(permit);
sem.add_permits(1);
});
}
}
error[E0597]: `sem` does not live long enough
--> src/bin/main.rs:299:22
|
299 | let permit = sem.acquire().await;
| ^^^----------
| |
| borrowed value does not live long enough
| argument requires that `sem` is borrowed for `'static`
...
310 | }
| - `sem` dropped here while still borrowed
error[E0382]: use of moved value: `permit`
--> src/bin/main.rs:304:33
|
299 | let permit = sem.acquire().await;
| ------ move occurs because `permit` has type `tokio::sync::semaphore::SemaphorePermit<'_>`, which does not implement the `Copy` trait
300 | permit.forget();
| ------ value moved here
...
304 | tokio::spawn(async move {
| _________________________________^
305 | | accept_connections();
306 | | drop(permit);
| | ------ use occurs due to use in generator
307 | | sem.add_permits(1);
308 | | });
| |_________^ value used here after move
error: aborting due to 2 previous errors
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment