summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-11-18 15:52:46 +0100
committerDavid Lönnhager <david.l@mullvad.net>2021-11-22 10:24:57 +0100
commit5447455d7b6b6c7be889e36c106d3cb668728a39 (patch)
tree7148e9581fcba2eab127ac89dc35287493fbd812
parent0adb9d44c49647cba38736bf92962b84c1ed00ce (diff)
downloadmullvadvpn-5447455d7b6b6c7be889e36c106d3cb668728a39.tar.xz
mullvadvpn-5447455d7b6b6c7be889e36c106d3cb668728a39.zip
Kill sslocal if setting up the tunnel monitor fails
-rw-r--r--talpid-core/src/proxy/shadowsocks.rs24
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>,
}