summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2023-09-08 15:16:58 +0200
committerDavid Lönnhager <david.l@mullvad.net>2023-09-11 16:38:34 +0200
commita75d57a529de16b9f089eed5dd1683eb6f350db7 (patch)
treeb5ede9628fac46f38446409b87de834b020ea965
parent64d0b37de5f0a4348482b02d4201544b8d0ecd63 (diff)
downloadmullvadvpn-a75d57a529de16b9f089eed5dd1683eb6f350db7.tar.xz
mullvadvpn-a75d57a529de16b9f089eed5dd1683eb6f350db7.zip
Use mutex instead of rwlock in management interface
-rw-r--r--mullvad-daemon/src/management_interface.rs14
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());
}
}