summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-11-05 16:37:04 +0100
committerDavid Lönnhager <david.l@mullvad.net>2020-11-06 16:17:01 +0100
commitf6dc016e775187ee3f1d9c17386f4d07c06d1eac (patch)
tree1ec55644e011ca62657ed561dcc08d1f55d85067
parent29259edada0e5a255cafb5ae5930c375cdb68764 (diff)
downloadmullvadvpn-f6dc016e775187ee3f1d9c17386f4d07c06d1eac.tar.xz
mullvadvpn-f6dc016e775187ee3f1d9c17386f4d07c06d1eac.zip
Remove assumption that senders will not be dropped
-rw-r--r--talpid-core/src/routing/unix.rs62
-rw-r--r--talpid-core/src/routing/windows.rs11
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)
}