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();
|
let server_clone = server.clone();
|
||||||
block_on(server_clone.lock().unwrap().on_start(&host_clone));
|
block_on(server_clone.lock().unwrap().on_start(&host_clone));
|
||||||
|
|
||||||
|
listener.set_nonblocking(true)?;
|
||||||
|
|
||||||
while running.load(Ordering::Acquire) {
|
while running.load(Ordering::Acquire) {
|
||||||
let (sock, _) = match listener.accept() {
|
let (sock, _) = match listener.accept() {
|
||||||
Ok(i) => i,
|
Ok(i) => i,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -847,7 +849,7 @@ where
|
|||||||
let (sock, _) = match listener.accept() {
|
let (sock, _) = match listener.accept() {
|
||||||
Ok(i) => i,
|
Ok(i) => i,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -887,7 +889,7 @@ where
|
|||||||
let (sock, _) = match listener.accept() {
|
let (sock, _) = match listener.accept() {
|
||||||
Ok(i) => i,
|
Ok(i) => i,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -944,7 +946,7 @@ type Job = Box<dyn FnOnce() + Send + 'static>;
|
|||||||
|
|
||||||
struct ThreadPool {
|
struct ThreadPool {
|
||||||
workers: Vec<Worker>,
|
workers: Vec<Worker>,
|
||||||
sender: mpsc::Sender<Job>,
|
sender: mpsc::Sender<Option<Job>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ThreadPool {
|
impl ThreadPool {
|
||||||
@ -964,6 +966,10 @@ impl ThreadPool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn join(self) {
|
fn join(self) {
|
||||||
|
for _ in 0..self.workers.len() {
|
||||||
|
self.sender.send(None).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
for ele in self.workers.into_iter() {
|
for ele in self.workers.into_iter() {
|
||||||
ele.thread.join().unwrap();
|
ele.thread.join().unwrap();
|
||||||
}
|
}
|
||||||
@ -975,7 +981,7 @@ impl ThreadPool {
|
|||||||
{
|
{
|
||||||
let job = Box::new(f);
|
let job = Box::new(f);
|
||||||
|
|
||||||
self.sender.send(job).unwrap();
|
self.sender.send(Some(job)).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -984,9 +990,9 @@ struct Worker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl 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 || {
|
let thread = thread::spawn(move || {
|
||||||
while let Ok(job) = receiver.lock().unwrap().recv() {
|
while let Ok(Some(job)) = receiver.lock().unwrap().recv() {
|
||||||
job();
|
job();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use ezhttp::{Headers, HttpRequest, HttpResponse, HttpServer, HttpServerStarter};
|
use ezhttp::{Headers, HttpRequest, HttpResponse, HttpServer, HttpServerStarter};
|
||||||
use std::time::Duration;
|
use std::{thread, time::Duration};
|
||||||
|
|
||||||
struct EzSite {
|
struct EzSite {
|
||||||
index_page: String,
|
index_page: String,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user