From ac7bcf11696157399b148ed373b329569112d85f Mon Sep 17 00:00:00 2001 From: Tw Date: Sun, 19 Sep 2021 02:36:15 +0800 Subject: [PATCH] fix(server): fix leakage of SessionMetaData (#728) There are different reasons leading the server thread exits, currently we only release the cached session data when client exits normally. This fix covers all the cases. Signed-off-by: Tw --- zellij-server/src/lib.rs | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/zellij-server/src/lib.rs b/zellij-server/src/lib.rs index 9073ed3a..419aae4f 100644 --- a/zellij-server/src/lib.rs +++ b/zellij-server/src/lib.rs @@ -170,19 +170,13 @@ pub fn start_server(os_input: Box, socket_path: PathBuf) { 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, - ) - } + .spawn(move || { + route_thread_main( + session_data, + session_state, + os_input, + to_server, + ) }) .unwrap(), ); @@ -267,7 +261,6 @@ pub fn start_server(os_input: Box, socket_path: PathBuf) { } } ServerInstruction::ClientExit => { - *session_data.write().unwrap() = None; os_input.send_to_client(ServerToClientMsg::Exit(ExitReason::Normal)); break; } @@ -297,6 +290,10 @@ pub fn start_server(os_input: Box, socket_path: PathBuf) { } } } + + // Drop cached session data before exit. + *session_data.write().unwrap() = None; + thread_handles .lock() .unwrap()