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:
Thomas Linford 2023-04-13 10:02:07 +02:00 committed by GitHub
parent b40f5ef2ca
commit 7e207f4c0c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 26 deletions

View file

@ -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));
} }

View file

@ -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;