summaryrefslogtreecommitdiffstats
path: root/zellij-server/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'zellij-server/src/lib.rs')
-rw-r--r--zellij-server/src/lib.rs70
1 files changed, 41 insertions, 29 deletions
diff --git a/zellij-server/src/lib.rs b/zellij-server/src/lib.rs
index e598d2384..7a5aed1ec 100644
--- a/zellij-server/src/lib.rs
+++ b/zellij-server/src/lib.rs
@@ -11,7 +11,7 @@ mod wasm_vm;
use zellij_utils::zellij_tile;
-use std::sync::{Arc, RwLock};
+use std::sync::{Arc, Mutex, RwLock};
use std::thread;
use std::{path::PathBuf, sync::mpsc};
use wasmer::Store;
@@ -132,18 +132,22 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>, socket_path: PathBuf) {
})
});
- #[cfg(any(feature = "test", test))]
- thread::Builder::new()
- .name("server_router".to_string())
- .spawn({
- let session_data = session_data.clone();
- let os_input = os_input.clone();
- let to_server = to_server.clone();
- let session_state = session_state.clone();
+ let thread_handles = Arc::new(Mutex::new(Vec::new()));
- move || route_thread_main(session_data, session_state, os_input, to_server)
- })
- .unwrap();
+ #[cfg(any(feature = "test", test))]
+ thread_handles.lock().unwrap().push(
+ thread::Builder::new()
+ .name("server_router".to_string())
+ .spawn({
+ let session_data = session_data.clone();
+ let os_input = os_input.clone();
+ let to_server = to_server.clone();
+ let session_state = session_state.clone();
+
+ move || route_thread_main(session_data, session_state, os_input, to_server)
+ })
+ .unwrap(),
+ );
#[cfg(not(any(feature = "test", test)))]
let _ = thread::Builder::new()
.name("server_listener".to_string())
@@ -157,6 +161,7 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>, socket_path: PathBuf) {
let session_state = session_state.clone();
let to_server = to_server.clone();
let socket_path = socket_path.clone();
+ let thread_handles = thread_handles.clone();
move || {
drop(std::fs::remove_file(&socket_path));
let listener = LocalSocketListener::bind(&*socket_path).unwrap();
@@ -169,23 +174,25 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>, socket_path: PathBuf) {
let session_data = session_data.clone();
let session_state = session_state.clone();
let to_server = to_server.clone();
- thread::Builder::new()
- .name("server_router".to_string())
- .spawn({
- let session_data = session_data.clone();
- let os_input = os_input.clone();
- let to_server = to_server.clone();
-
- move || {
- route_thread_main(
- session_data,
- session_state,
- os_input,
- to_server,
- )
- }
- })
- .unwrap();
+ thread_handles.lock().unwrap().push(
+ thread::Builder::new()
+ .name("server_router".to_string())
+ .spawn({
+ let session_data = session_data.clone();
+ let os_input = os_input.clone();
+ let to_server = to_server.clone();
+
+ move || {
+ route_thread_main(
+ session_data,
+ session_state,
+ os_input,
+ to_server,
+ )
+ }
+ })
+ .unwrap(),
+ );
}
Err(err) => {
panic!("err {:?}", err);
@@ -274,6 +281,11 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>, socket_path: PathBuf) {
}
}
}
+ thread_handles
+ .lock()
+ .unwrap()
+ .drain(..)
+ .for_each(|h| drop(h.join()));
#[cfg(not(any(feature = "test", test)))]
drop(std::fs::remove_file(&socket_path));
}