From 7ec1e424543724d24d74f7f275f135448455daf9 Mon Sep 17 00:00:00 2001 From: MeexReay Date: Sat, 22 Jun 2024 17:57:45 +0300 Subject: [PATCH] fix close method in RunningHttpServer --- src/lib.rs | 20 +++++++++++++------- src/main.rs | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index bd44bf5..0d58afb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -801,11 +801,13 @@ where let server_clone = server.clone(); block_on(server_clone.lock().unwrap().on_start(&host_clone)); + listener.set_nonblocking(true)?; + while running.load(Ordering::Acquire) { let (sock, _) = match listener.accept() { Ok(i) => i, Err(_) => { - break; + continue; } }; @@ -847,7 +849,7 @@ where let (sock, _) = match listener.accept() { Ok(i) => i, Err(_) => { - break; + continue; } }; @@ -887,7 +889,7 @@ where let (sock, _) = match listener.accept() { Ok(i) => i, Err(_) => { - break; + continue; } }; @@ -944,7 +946,7 @@ type Job = Box; struct ThreadPool { workers: Vec, - sender: mpsc::Sender, + sender: mpsc::Sender>, } impl ThreadPool { @@ -964,6 +966,10 @@ impl ThreadPool { } fn join(self) { + for _ in 0..self.workers.len() { + self.sender.send(None).unwrap(); + } + for ele in self.workers.into_iter() { ele.thread.join().unwrap(); } @@ -975,7 +981,7 @@ impl ThreadPool { { let job = Box::new(f); - self.sender.send(job).unwrap(); + self.sender.send(Some(job)).unwrap(); } } @@ -984,9 +990,9 @@ struct Worker { } impl Worker { - fn new(receiver: Arc>>) -> Worker { + fn new(receiver: Arc>>>) -> Worker { let thread = thread::spawn(move || { - while let Ok(job) = receiver.lock().unwrap().recv() { + while let Ok(Some(job)) = receiver.lock().unwrap().recv() { job(); } }); diff --git a/src/main.rs b/src/main.rs index b3ef31d..cf32560 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ use ezhttp::{Headers, HttpRequest, HttpResponse, HttpServer, HttpServerStarter}; -use std::time::Duration; +use std::{thread, time::Duration}; struct EzSite { index_page: String,