diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-03-09 10:57:33 +0100 |
|---|---|---|
| committer | David Lönnhager <dv.lnh.d@gmail.com> | 2024-03-11 13:34:35 +0100 |
| commit | 7869cb45e562dd285ed2646fa175742e3d3d187a (patch) | |
| tree | c9d9ac7a84ac8c1783a9a92a3e8e76d356e5f25d /talpid-routing | |
| parent | 0188e40fb8dc94ba8cf967cdefa532c5fbd24382 (diff) | |
| download | mullvadvpn-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.rs | 19 |
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)); + } } } |
