fix: do not hold on to router thread handle until server exit (#2328)
* do not hold on to thread handle until server exit * fix tests
This commit is contained in:
parent
b40f5ef2ca
commit
7e207f4c0c
2 changed files with 18 additions and 26 deletions
|
|
@ -20,7 +20,7 @@ use pty_writer::{pty_writer_main, PtyWriteInstruction};
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::{
|
use std::{
|
||||||
path::PathBuf,
|
path::PathBuf,
|
||||||
sync::{Arc, Mutex, RwLock},
|
sync::{Arc, RwLock},
|
||||||
thread,
|
thread,
|
||||||
};
|
};
|
||||||
use zellij_utils::envs;
|
use zellij_utils::envs;
|
||||||
|
|
@ -260,8 +260,6 @@ pub fn start_server(mut os_input: Box<dyn ServerOsApi>, socket_path: PathBuf) {
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
let thread_handles = Arc::new(Mutex::new(Vec::new()));
|
|
||||||
|
|
||||||
let _ = thread::Builder::new()
|
let _ = thread::Builder::new()
|
||||||
.name("server_listener".to_string())
|
.name("server_listener".to_string())
|
||||||
.spawn({
|
.spawn({
|
||||||
|
|
@ -274,7 +272,6 @@ pub fn start_server(mut os_input: Box<dyn ServerOsApi>, socket_path: PathBuf) {
|
||||||
let session_state = session_state.clone();
|
let session_state = session_state.clone();
|
||||||
let to_server = to_server.clone();
|
let to_server = to_server.clone();
|
||||||
let socket_path = socket_path.clone();
|
let socket_path = socket_path.clone();
|
||||||
let thread_handles = thread_handles.clone();
|
|
||||||
move || {
|
move || {
|
||||||
drop(std::fs::remove_file(&socket_path));
|
drop(std::fs::remove_file(&socket_path));
|
||||||
let listener = LocalSocketListener::bind(&*socket_path).unwrap();
|
let listener = LocalSocketListener::bind(&*socket_path).unwrap();
|
||||||
|
|
@ -291,22 +288,20 @@ pub fn start_server(mut os_input: Box<dyn ServerOsApi>, socket_path: PathBuf) {
|
||||||
let session_data = session_data.clone();
|
let session_data = session_data.clone();
|
||||||
let session_state = session_state.clone();
|
let session_state = session_state.clone();
|
||||||
let to_server = to_server.clone();
|
let to_server = to_server.clone();
|
||||||
thread_handles.lock().unwrap().push(
|
thread::Builder::new()
|
||||||
thread::Builder::new()
|
.name("server_router".to_string())
|
||||||
.name("server_router".to_string())
|
.spawn(move || {
|
||||||
.spawn(move || {
|
route_thread_main(
|
||||||
route_thread_main(
|
session_data,
|
||||||
session_data,
|
session_state,
|
||||||
session_state,
|
os_input,
|
||||||
os_input,
|
to_server,
|
||||||
to_server,
|
receiver,
|
||||||
receiver,
|
client_id,
|
||||||
client_id,
|
)
|
||||||
)
|
.fatal()
|
||||||
.fatal()
|
})
|
||||||
})
|
.unwrap();
|
||||||
.unwrap(),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
panic!("err {:?}", err);
|
panic!("err {:?}", err);
|
||||||
|
|
@ -642,11 +637,6 @@ pub fn start_server(mut os_input: Box<dyn ServerOsApi>, socket_path: PathBuf) {
|
||||||
// Drop cached session data before exit.
|
// Drop cached session data before exit.
|
||||||
*session_data.write().unwrap() = None;
|
*session_data.write().unwrap() = None;
|
||||||
|
|
||||||
thread_handles
|
|
||||||
.lock()
|
|
||||||
.unwrap()
|
|
||||||
.drain(..)
|
|
||||||
.for_each(|h| drop(h.join()));
|
|
||||||
drop(std::fs::remove_file(&socket_path));
|
drop(std::fs::remove_file(&socket_path));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ use super::{Output, Tab};
|
||||||
use crate::panes::sixel::SixelImageStore;
|
use crate::panes::sixel::SixelImageStore;
|
||||||
use crate::screen::CopyOptions;
|
use crate::screen::CopyOptions;
|
||||||
use crate::Arc;
|
use crate::Arc;
|
||||||
use crate::Mutex;
|
|
||||||
use crate::{
|
use crate::{
|
||||||
os_input_output::{AsyncReader, Pid, ServerOsApi},
|
os_input_output::{AsyncReader, Pid, ServerOsApi},
|
||||||
panes::PaneId,
|
panes::PaneId,
|
||||||
|
|
@ -11,6 +11,8 @@ use crate::{
|
||||||
ClientId,
|
ClientId,
|
||||||
};
|
};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use std::sync::Mutex;
|
||||||
|
|
||||||
use zellij_utils::channels::Receiver;
|
use zellij_utils::channels::Receiver;
|
||||||
use zellij_utils::data::Direction;
|
use zellij_utils::data::Direction;
|
||||||
use zellij_utils::data::Resize;
|
use zellij_utils::data::Resize;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue