diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-11-18 15:52:46 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-11-22 10:24:57 +0100 |
| commit | 5447455d7b6b6c7be889e36c106d3cb668728a39 (patch) | |
| tree | 7148e9581fcba2eab127ac89dc35287493fbd812 | |
| parent | 0adb9d44c49647cba38736bf92962b84c1ed00ce (diff) | |
| download | mullvadvpn-5447455d7b6b6c7be889e36c106d3cb668728a39.tar.xz mullvadvpn-5447455d7b6b6c7be889e36c106d3cb668728a39.zip | |
Kill sslocal if setting up the tunnel monitor fails
| -rw-r--r-- | talpid-core/src/proxy/shadowsocks.rs | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/talpid-core/src/proxy/shadowsocks.rs b/talpid-core/src/proxy/shadowsocks.rs index 326a264748..7fbf4cb5f9 100644 --- a/talpid-core/src/proxy/shadowsocks.rs +++ b/talpid-core/src/proxy/shadowsocks.rs @@ -114,7 +114,7 @@ impl fmt::Display for ShadowsocksCommand { } pub struct ShadowsocksProxyMonitor { - subproc: Arc<duct::Handle>, + subproc: Arc<ProcessHandle>, closed: Arc<AtomicBool>, port: u16, } @@ -125,6 +125,24 @@ const SHADOWSOCKS_BIN_FILENAME: &str = "sslocal"; #[cfg(windows)] const SHADOWSOCKS_BIN_FILENAME: &str = "sslocal.exe"; +struct ProcessHandle { + subproc: duct::Handle, +} + +impl Drop for ProcessHandle { + fn drop(&mut self) { + let _ = self.subproc.kill(); + } +} + +impl std::ops::Deref for ProcessHandle { + type Target = duct::Handle; + + fn deref(&self) -> &Self::Target { + &self.subproc + } +} + impl ShadowsocksProxyMonitor { pub fn start( settings: &ShadowsocksProxySettings, @@ -183,7 +201,7 @@ impl ShadowsocksProxyMonitor { match Self::get_bound_port(File::open(&logfile)?, &subproc) { Ok(port) => Ok(Self { - subproc: Arc::new(subproc), + subproc: Arc::new(ProcessHandle { subproc }), closed: Arc::new(AtomicBool::new(false)), port, }), @@ -272,7 +290,7 @@ impl ProxyMonitor for ShadowsocksProxyMonitor { } pub struct ShadowsocksProxyMonitorCloseHandle { - subproc: Arc<duct::Handle>, + subproc: Arc<ProcessHandle>, closed: Arc<AtomicBool>, } |
