diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-11-05 16:37:04 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-11-06 16:17:01 +0100 |
| commit | f6dc016e775187ee3f1d9c17386f4d07c06d1eac (patch) | |
| tree | 1ec55644e011ca62657ed561dcc08d1f55d85067 | |
| parent | 29259edada0e5a255cafb5ae5930c375cdb68764 (diff) | |
| download | mullvadvpn-f6dc016e775187ee3f1d9c17386f4d07c06d1eac.tar.xz mullvadvpn-f6dc016e775187ee3f1d9c17386f4d07c06d1eac.zip | |
Remove assumption that senders will not be dropped
| -rw-r--r-- | talpid-core/src/routing/unix.rs | 62 | ||||
| -rw-r--r-- | talpid-core/src/routing/windows.rs | 11 |
2 files changed, 33 insertions, 40 deletions
diff --git a/talpid-core/src/routing/unix.rs b/talpid-core/src/routing/unix.rs index b48d493244..147a33a1a5 100644 --- a/talpid-core/src/routing/unix.rs +++ b/talpid-core/src/routing/unix.rs @@ -8,7 +8,6 @@ use futures::channel::{ oneshot, }; use std::{collections::HashSet, io}; -use talpid_types::ErrorExt; #[cfg(target_os = "linux")] use std::net::IpAddr; @@ -30,9 +29,9 @@ pub use imp::Error as PlatformError; /// Errors that can be encountered whilst initializing RouteManager #[derive(err_derive::Error, Debug)] pub enum Error { - /// Routing manager thread panicked before starting routing manager - #[error(display = "Routing manager thread panicked before starting routing manager")] - RoutingManagerThreadPanic, + /// Route manager thread may have panicked + #[error(display = "The channel sender was dropped")] + ManagerChannelDown, /// Platform specific error occured #[error(display = "Internal route manager error")] PlatformError(#[error(source)] imp::Error), @@ -63,7 +62,7 @@ impl RouteManagerHandle { .map_err(|_| Error::RouteManagerDown)?; self.runtime .block_on(response_rx) - .unwrap() + .map_err(|_| Error::ManagerChannelDown)? .map_err(Error::PlatformError) } @@ -77,7 +76,10 @@ impl RouteManagerHandle { response_tx, )) .map_err(|_| Error::RouteManagerDown)?; - Ok(self.runtime.block_on(response_rx).unwrap()) + Ok(self + .runtime + .block_on(response_rx) + .map_err(|_| Error::ManagerChannelDown)?) } } @@ -151,7 +153,7 @@ impl RouteManager { } if self.runtime.block_on(wait_rx).is_err() { - log::error!("RouteManager paniced while shutting down"); + log::error!("{}", Error::ManagerChannelDown); } } } @@ -167,16 +169,10 @@ impl RouteManager { return Err(Error::RouteManagerDown); } - match self.runtime.block_on(result_rx) { - Ok(result) => result.map_err(Error::PlatformError), - Err(error) => { - log::trace!( - "{}", - error.display_chain_with_msg("oneshot channel is closed") - ); - Ok(()) - } - } + self.runtime + .block_on(result_rx) + .map_err(|_| Error::ManagerChannelDown)? + .map_err(Error::PlatformError) } else { Err(Error::RouteManagerDown) } @@ -207,13 +203,10 @@ impl RouteManager { return Err(Error::RouteManagerDown); } - match self.runtime.block_on(result_rx) { - Ok(result) => result.map_err(Error::PlatformError), - Err(error) => { - log::trace!("{}", error.display_chain_with_msg("channel is closed")); - Ok(()) - } - } + self.runtime + .block_on(result_rx) + .map_err(|_| Error::ManagerChannelDown)? + .map_err(Error::PlatformError) } else { Err(Error::RouteManagerDown) } @@ -249,13 +242,9 @@ impl RouteManager { { return Err(Error::RouteManagerDown); } - match self.runtime.block_on(result_rx) { - Ok(()) => Ok(()), - Err(error) => { - log::trace!("{}", error.display_chain_with_msg("channel is closed")); - Ok(()) - } - } + self.runtime + .block_on(result_rx) + .map_err(|_| Error::ManagerChannelDown) } else { Err(Error::RouteManagerDown) } @@ -299,13 +288,10 @@ impl RouteManager { return Err(Error::RouteManagerDown); } - match self.runtime.block_on(result_rx) { - Ok(result) => result.map_err(Error::PlatformError), - Err(error) => { - log::trace!("{}", error.display_chain_with_msg("channel is closed")); - Ok(()) - } - } + self.runtime + .block_on(result_rx) + .map_err(|_| Error::ManagerChannelDown)? + .map_err(Error::PlatformError) } else { Err(Error::RouteManagerDown) } diff --git a/talpid-core/src/routing/windows.rs b/talpid-core/src/routing/windows.rs index 80c21d5e56..47a45672dc 100644 --- a/talpid-core/src/routing/windows.rs +++ b/talpid-core/src/routing/windows.rs @@ -12,6 +12,9 @@ use std::collections::HashSet; /// Windows routing errors. #[derive(err_derive::Error, Debug)] pub enum Error { + /// The sender was dropped unexpectedly -- possible panic + #[error(display = "The channel sender was dropped")] + ManagerChannelDown, /// Failure to initialize route manager #[error(display = "Failed to start route manager")] FailedToStartManager, @@ -49,7 +52,9 @@ impl RouteManagerHandle { self.tx .unbounded_send(RouteManagerCommand::AddRoutes(routes, response_tx)) .map_err(|_| Error::RouteManagerDown)?; - self.runtime.block_on(response_rx).unwrap() + self.runtime + .block_on(response_rx) + .map_err(|_| Error::ManagerChannelDown)? } } @@ -178,7 +183,9 @@ impl RouteManager { { return Err(Error::RouteManagerDown); } - self.runtime.block_on(result_rx).unwrap() + self.runtime + .block_on(result_rx) + .map_err(|_| Error::ManagerChannelDown)? } else { Err(Error::RouteManagerDown) } |
