ssh remoting: Kill SSH master process when dropping client (#18331)

This was a process leak. Since we use `.spawn()`, the process continued
to run in the background, even if our `SshClientState` was dropped.

Means we need to manually clean it up.

Release Notes:

- N/A

Co-authored-by: Bennet <bennet@zed.dev>
This commit is contained in:
Thorsten Ball 2024-09-25 12:45:53 +02:00 committed by GitHub
parent a6cb17fb51
commit 300bf87f77
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -56,7 +56,7 @@ pub struct SshSession {
struct SshClientState {
socket: SshSocket,
_master_process: process::Child,
master_process: process::Child,
_temp_dir: TempDir,
}
@ -593,7 +593,7 @@ impl SshClientState {
connection_options,
socket_path,
},
_master_process: master_process,
master_process,
_temp_dir: temp_dir,
})
}
@ -716,6 +716,14 @@ impl SshClientState {
}
}
impl Drop for SshClientState {
fn drop(&mut self) {
if let Err(error) = self.master_process.kill() {
log::error!("failed to kill SSH master process: {}", error);
}
}
}
impl SshSocket {
fn ssh_command<S: AsRef<OsStr>>(&self, program: S) -> process::Command {
let mut command = process::Command::new("ssh");