diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-09-08 15:16:58 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-09-11 16:38:34 +0200 |
| commit | a75d57a529de16b9f089eed5dd1683eb6f350db7 (patch) | |
| tree | b5ede9628fac46f38446409b87de834b020ea965 | |
| parent | 64d0b37de5f0a4348482b02d4201544b8d0ecd63 (diff) | |
| download | mullvadvpn-a75d57a529de16b9f089eed5dd1683eb6f350db7.tar.xz mullvadvpn-a75d57a529de16b9f089eed5dd1683eb6f350db7.zip | |
Use mutex instead of rwlock in management interface
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index 76b6a7e4fd..23f2578f58 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -23,12 +23,11 @@ use mullvad_types::{ version, wireguard::{RotationInterval, RotationIntervalError}, }; -use parking_lot::RwLock; #[cfg(windows)] use std::path::PathBuf; use std::{ convert::{TryFrom, TryInto}, - sync::Arc, + sync::{Arc, Mutex}, time::Duration, }; use talpid_types::ErrorExt; @@ -44,7 +43,7 @@ pub enum Error { struct ManagementServiceImpl { daemon_tx: DaemonCommandSender, - subscriptions: Arc<RwLock<Vec<EventsListenerSender>>>, + subscriptions: Arc<Mutex<Vec<EventsListenerSender>>>, } pub type ServiceResult<T> = std::result::Result<Response<T>, Status>; @@ -102,7 +101,7 @@ impl ManagementService for ManagementServiceImpl { async fn events_listen(&self, _: Request<()>) -> ServiceResult<Self::EventsListenStream> { let (tx, rx) = tokio::sync::mpsc::unbounded_channel(); - let mut subscriptions = self.subscriptions.write(); + let mut subscriptions = self.subscriptions.lock().unwrap(); subscriptions.push(tx); Ok(Response::new(UnboundedReceiverStream::new(rx))) @@ -881,7 +880,7 @@ impl ManagementInterfaceServer { pub fn start( tunnel_tx: DaemonCommandSender, ) -> Result<(String, ManagementInterfaceEventBroadcaster), Error> { - let subscriptions = Arc::<RwLock<Vec<EventsListenerSender>>>::default(); + let subscriptions = Arc::<Mutex<Vec<EventsListenerSender>>>::default(); let socket_path = mullvad_paths::get_rpc_socket_path() .to_string_lossy() @@ -917,7 +916,7 @@ impl ManagementInterfaceServer { /// A handle that allows broadcasting messages to all subscribers of the management interface. #[derive(Clone)] pub struct ManagementInterfaceEventBroadcaster { - subscriptions: Arc<RwLock<Vec<EventsListenerSender>>>, + subscriptions: Arc<Mutex<Vec<EventsListenerSender>>>, _close_handle: mpsc::Sender<()>, } @@ -981,8 +980,7 @@ impl EventListener for ManagementInterfaceEventBroadcaster { impl ManagementInterfaceEventBroadcaster { fn notify(&self, value: types::DaemonEvent) { - let mut subscriptions = self.subscriptions.write(); - // TODO: using write-lock everywhere. use a mutex instead? + let mut subscriptions = self.subscriptions.lock().unwrap(); subscriptions.retain(|tx| tx.send(Ok(value.clone())).is_ok()); } } |
