summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-20 11:46:10 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-20 11:46:10 -0300
commit40f772ecb9dd7f4e9c77bf255d95c0bb9008e5c4 (patch)
treeb40911db94f28d905cdb1e8ffa9d69107b16685f
parent586a0c1f78adad9ef19ec4a676239269627024b1 (diff)
parenta51824e5d44d0af8d4cd99a93c449dc30d1648e3 (diff)
downloadmullvadvpn-40f772ecb9dd7f4e9c77bf255d95c0bb9008e5c4.tar.xz
mullvadvpn-40f772ecb9dd7f4e9c77bf255d95c0bb9008e5c4.zip
Merge branch 'refactor-rpc-socket-removal'
-rw-r--r--mullvad-daemon/src/lib.rs41
-rw-r--r--mullvad-daemon/src/management_interface.rs7
2 files changed, 16 insertions, 32 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs
index 37d6e7f6d5..bc8bfef9ae 100644
--- a/mullvad-daemon/src/lib.rs
+++ b/mullvad-daemon/src/lib.rs
@@ -187,8 +187,6 @@ pub struct Daemon {
tx: mpsc::Sender<InternalDaemonEvent>,
reconnection_loop_tx: Option<mpsc::Sender<()>>,
management_interface_broadcaster: management_interface::EventBroadcaster,
- #[cfg(unix)]
- management_interface_socket_path: String,
settings: Settings,
account_history: account_history::AccountHistory,
wg_key_proxy: WireguardKeyProxy<HttpHandle>,
@@ -229,12 +227,12 @@ impl Daemon {
let (internal_event_tx, internal_event_rx) = mpsc::channel();
- let management_interface_result =
+ let management_interface_broadcaster =
Self::start_management_interface(internal_event_tx.clone())?;
+ let relay_list_broadcaster = management_interface_broadcaster.clone();
- let management_interface_broadcaster = management_interface_result.0.clone();
let on_relay_list_update = move |relay_list: &RelayList| {
- management_interface_broadcaster.notify_relay_list(relay_list.clone());
+ relay_list_broadcaster.notify_relay_list(relay_list.clone());
};
let relay_selector = relays::RelaySelector::new(
rpc_handle.clone(),
@@ -271,9 +269,7 @@ impl Daemon {
rx: internal_event_rx,
tx: internal_event_tx,
reconnection_loop_tx: None,
- management_interface_broadcaster: management_interface_result.0,
- #[cfg(unix)]
- management_interface_socket_path: management_interface_result.1,
+ management_interface_broadcaster,
settings,
account_history,
wg_key_proxy: WireguardKeyProxy::new(rpc_handle.clone()),
@@ -291,13 +287,12 @@ impl Daemon {
// Returns a handle that allows notifying all subscribers on events.
fn start_management_interface(
event_tx: mpsc::Sender<InternalDaemonEvent>,
- ) -> Result<(management_interface::EventBroadcaster, String)> {
+ ) -> Result<management_interface::EventBroadcaster> {
let multiplex_event_tx = IntoSender::from(event_tx.clone());
let server = Self::start_management_interface_server(multiplex_event_tx)?;
let event_broadcaster = server.event_broadcaster();
- let socket_path = server.socket_path().to_owned();
Self::spawn_management_interface_wait_thread(server, event_tx);
- Ok((event_broadcaster, socket_path))
+ Ok(event_broadcaster)
}
fn start_management_interface_server(
@@ -305,10 +300,7 @@ impl Daemon {
) -> Result<ManagementInterfaceServer> {
let server =
ManagementInterfaceServer::start(event_tx).map_err(Error::StartManagementInterface)?;
- info!(
- "Mullvad management interface listening on {}",
- server.socket_path()
- );
+ info!("Management interface listening on {}", server.socket_path());
Ok(server)
}
@@ -319,7 +311,7 @@ impl Daemon {
) {
thread::spawn(move || {
server.wait();
- error!("Mullvad management interface shut down");
+ info!("Management interface shut down");
let _ = exit_tx.send(InternalDaemonEvent::ManagementInterfaceExited);
});
}
@@ -342,6 +334,7 @@ impl Daemon {
break;
}
}
+ self.management_interface_broadcaster.close();
Ok(())
}
@@ -1038,22 +1031,6 @@ impl DaemonShutdownHandle {
}
}
-impl Drop for Daemon {
- fn drop(&mut self) {
- #[cfg(unix)]
- {
- use std::fs;
- if let Err(e) = fs::remove_file(&self.management_interface_socket_path) {
- error!(
- "Failed to remove RPC socket {}: {}",
- self.management_interface_socket_path, e
- );
- }
- }
- }
-}
-
-
struct MullvadTunnelParametersGenerator {
tx: mpsc::Sender<InternalDaemonEvent>,
}
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs
index cb313ed653..c2ebf4ceb2 100644
--- a/mullvad-daemon/src/management_interface.rs
+++ b/mullvad-daemon/src/management_interface.rs
@@ -260,6 +260,7 @@ impl ManagementInterfaceServer {
pub fn event_broadcaster(&self) -> EventBroadcaster {
EventBroadcaster {
subscriptions: self.subscriptions.clone(),
+ close_handle: self.server.close_handle(),
}
}
@@ -274,9 +275,15 @@ impl ManagementInterfaceServer {
#[derive(Clone)]
pub struct EventBroadcaster {
subscriptions: Arc<RwLock<HashMap<SubscriptionId, pubsub::Sink<DaemonEvent>>>>,
+ close_handle: talpid_ipc::CloseHandle,
}
impl EventBroadcaster {
+ /// Notifies that the management interface should be closed
+ pub fn close(self) {
+ self.close_handle.close();
+ }
+
/// Sends a new state update to all `new_state` subscribers of the management interface.
pub fn notify_new_state(&self, new_state: TunnelStateTransition) {
log::debug!("Broadcasting new state: {:?}", new_state);