fix close method in RunningHttpServer
This commit is contained in:
parent
3a7387b894
commit
7ec1e42454
20
src/lib.rs
20
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<dyn FnOnce() + Send + 'static>;
|
||||
|
||||
struct ThreadPool {
|
||||
workers: Vec<Worker>,
|
||||
sender: mpsc::Sender<Job>,
|
||||
sender: mpsc::Sender<Option<Job>>,
|
||||
}
|
||||
|
||||
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<Mutex<mpsc::Receiver<Job>>>) -> Worker {
|
||||
fn new(receiver: Arc<Mutex<mpsc::Receiver<Option<Job>>>>) -> Worker {
|
||||
let thread = thread::spawn(move || {
|
||||
while let Ok(job) = receiver.lock().unwrap().recv() {
|
||||
while let Ok(Some(job)) = receiver.lock().unwrap().recv() {
|
||||
job();
|
||||
}
|
||||
});
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user