diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-10-29 14:59:46 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2022-03-14 12:08:38 +0100 |
| commit | 8baa2cab6965a3ed3597c34201ad540c5ed10ca8 (patch) | |
| tree | bbaf144582f5c40273cb876fe87a610e59dd32a2 | |
| parent | d02aed4f31ace7c401582411d007e3122ea71bcd (diff) | |
| download | mullvadvpn-8baa2cab6965a3ed3597c34201ad540c5ed10ca8.tar.xz mullvadvpn-8baa2cab6965a3ed3597c34201ad540c5ed10ca8.zip | |
Flush device cache correctly on shutdown
| -rw-r--r-- | mullvad-daemon/src/device.rs | 16 | ||||
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 2 |
2 files changed, 15 insertions, 3 deletions
diff --git a/mullvad-daemon/src/device.rs b/mullvad-daemon/src/device.rs index 0e934626ef..470cfd7c89 100644 --- a/mullvad-daemon/src/device.rs +++ b/mullvad-daemon/src/device.rs @@ -295,14 +295,24 @@ impl AccountManager { abort_handle.abort(); } } + + /// Consumes the object and completes when there is nothing left to write to + /// the cache file. + pub fn finalize(mut self) -> impl Future<Output = ()> { + let join_handle = self.cache_task_join_handle.take(); + drop(self); + + async move { + if let Some(join_handle) = join_handle { + let _ = join_handle.await; + } + } + } } impl Drop for AccountManager { fn drop(&mut self) { self.stop_key_rotation(); - if let Some(cache_task_join_handle) = self.cache_task_join_handle.take() { - let _ = self.runtime.block_on(cache_task_join_handle); - } } } diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index c51cb8510e..464824fc59 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -880,6 +880,7 @@ where let Daemon { event_listener, mut shutdown_tasks, + account_manager, rpc_runtime, tunnel_state_machine_handle, target_state, @@ -887,6 +888,7 @@ where } = self; shutdown_tasks.push(Box::pin(target_state.finalize())); + shutdown_tasks.insert(0, Box::pin(account_manager.finalize())); ( event_listener, |
