summaryrefslogtreecommitdiffhomepage
path: root/talpid-routing
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2024-03-09 10:57:33 +0100
committerDavid Lönnhager <dv.lnh.d@gmail.com>2024-03-11 13:34:35 +0100
commit7869cb45e562dd285ed2646fa175742e3d3d187a (patch)
treec9d9ac7a84ac8c1783a9a92a3e8e76d356e5f25d /talpid-routing
parent0188e40fb8dc94ba8cf967cdefa532c5fbd24382 (diff)
downloadmullvadvpn-7869cb45e562dd285ed2646fa175742e3d3d187a.tar.xz
mullvadvpn-7869cb45e562dd285ed2646fa175742e3d3d187a.zip
Unify stop method signature between route manager implementations
Diffstat (limited to 'talpid-routing')
-rw-r--r--talpid-routing/src/windows/mod.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/talpid-routing/src/windows/mod.rs b/talpid-routing/src/windows/mod.rs
index b469fd5425..c03beea8cf 100644
--- a/talpid-routing/src/windows/mod.rs
+++ b/talpid-routing/src/windows/mod.rs
@@ -151,7 +151,7 @@ pub enum RouteManagerCommand {
GetMtuForRoute(IpAddr, oneshot::Sender<Result<u16>>),
ClearRoutes,
RegisterDefaultRouteChangeCallback(Callback, oneshot::Sender<CallbackHandle>),
- Shutdown,
+ Shutdown(oneshot::Sender<Result<()>>),
}
impl RouteManager {
@@ -233,7 +233,9 @@ impl RouteManager {
RouteManagerCommand::RegisterDefaultRouteChangeCallback(callback, tx) => {
let _ = tx.send(internal.register_default_route_changed_callback(callback));
}
- RouteManagerCommand::Shutdown => {
+ RouteManagerCommand::Shutdown(tx) => {
+ drop(internal);
+ let _ = tx.send(Ok(()));
break;
}
}
@@ -242,11 +244,11 @@ impl RouteManager {
/// Stops the routing manager and invalidates the route manager - no new default route callbacks
/// can be added
- pub fn stop(&mut self) {
+ pub async fn stop(&mut self) {
if let Some(tx) = self.manage_tx.take() {
- if tx.unbounded_send(RouteManagerCommand::Shutdown).is_err() {
- log::error!("RouteManager channel already down or thread panicked");
- }
+ let (result_tx, result_rx) = oneshot::channel();
+ let _ = tx.unbounded_send(RouteManagerCommand::Shutdown(result_tx));
+ _ = result_rx.await;
}
}
@@ -293,6 +295,9 @@ fn get_mtu_for_route(addr_family: AddressFamily) -> Result<Option<u16>> {
impl Drop for RouteManager {
fn drop(&mut self) {
- self.stop();
+ if let Some(tx) = self.manage_tx.take() {
+ let (done_tx, _) = oneshot::channel();
+ let _ = tx.unbounded_send(RouteManagerCommand::Shutdown(done_tx));
+ }
}
}