diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-20 11:46:10 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-20 11:46:10 -0300 |
| commit | 40f772ecb9dd7f4e9c77bf255d95c0bb9008e5c4 (patch) | |
| tree | b40911db94f28d905cdb1e8ffa9d69107b16685f | |
| parent | 586a0c1f78adad9ef19ec4a676239269627024b1 (diff) | |
| parent | a51824e5d44d0af8d4cd99a93c449dc30d1648e3 (diff) | |
| download | mullvadvpn-40f772ecb9dd7f4e9c77bf255d95c0bb9008e5c4.tar.xz mullvadvpn-40f772ecb9dd7f4e9c77bf255d95c0bb9008e5c4.zip | |
Merge branch 'refactor-rpc-socket-removal'
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 41 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 7 |
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); |
