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 <tw19881113@gmail.com>
This commit is contained in:
parent
72b0474d02
commit
ac7bcf1169
1 changed files with 11 additions and 14 deletions
|
|
@ -170,19 +170,13 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>, 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<dyn ServerOsApi>, 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<dyn ServerOsApi>, socket_path: PathBuf) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Drop cached session data before exit.
|
||||
*session_data.write().unwrap() = None;
|
||||
|
||||
thread_handles
|
||||
.lock()
|
||||
.unwrap()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue