Skip to content

Commit

Permalink
Replace Rc with Arc for thread-safety
Browse files Browse the repository at this point in the history
  • Loading branch information
josephrhobbs committed Aug 6, 2024
1 parent cc73138 commit 526ca95
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 24 deletions.
18 changes: 9 additions & 9 deletions src/connection.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::fmt;
use std::net::Ipv4Addr;
use std::rc::Rc;
use std::sync::Arc;

use dbus_nm::DBusNetworkManager;
use errors::*;
Expand All @@ -11,17 +11,17 @@ use wifi::{AccessPoint, AccessPointCredentials};

#[derive(Clone)]
pub struct Connection {
dbus_manager: Rc<DBusNetworkManager>,
dbus_manager: Arc<DBusNetworkManager>,
path: String,
settings: ConnectionSettings,
}

impl Connection {
fn init(dbus_manager: &Rc<DBusNetworkManager>, path: &str) -> Result<Self> {
fn init(dbus_manager: &Arc<DBusNetworkManager>, path: &str) -> Result<Self> {
let settings = dbus_manager.get_connection_settings(path)?;

Ok(Connection {
dbus_manager: Rc::clone(dbus_manager),
dbus_manager: Arc::clone(dbus_manager),
path: path.to_string(),
settings,
})
Expand Down Expand Up @@ -193,7 +193,7 @@ impl From<i64> for ConnectionState {
}
}

pub fn get_connections(dbus_manager: &Rc<DBusNetworkManager>) -> Result<Vec<Connection>> {
pub fn get_connections(dbus_manager: &Arc<DBusNetworkManager>) -> Result<Vec<Connection>> {
let paths = dbus_manager.list_connections()?;

let mut connections = Vec::with_capacity(paths.len());
Expand All @@ -207,7 +207,7 @@ pub fn get_connections(dbus_manager: &Rc<DBusNetworkManager>) -> Result<Vec<Conn
Ok(connections)
}

pub fn get_active_connections(dbus_manager: &Rc<DBusNetworkManager>) -> Result<Vec<Connection>> {
pub fn get_active_connections(dbus_manager: &Arc<DBusNetworkManager>) -> Result<Vec<Connection>> {
let active_paths = dbus_manager.get_active_connections()?;

let mut connections = Vec::with_capacity(active_paths.len());
Expand All @@ -224,7 +224,7 @@ pub fn get_active_connections(dbus_manager: &Rc<DBusNetworkManager>) -> Result<V
}

pub fn connect_to_access_point(
dbus_manager: &Rc<DBusNetworkManager>,
dbus_manager: &Arc<DBusNetworkManager>,
device_path: &str,
access_point: &AccessPoint,
credentials: &AccessPointCredentials,
Expand All @@ -243,7 +243,7 @@ pub fn connect_to_access_point(
}

pub fn create_hotspot<S>(
dbus_manager: &Rc<DBusNetworkManager>,
dbus_manager: &Arc<DBusNetworkManager>,
device_path: &str,
interface: &str,
ssid: &S,
Expand All @@ -267,7 +267,7 @@ where
}

pub fn create_hotspot_advanced<S>(
dbus_manager: &Rc<DBusNetworkManager>,
dbus_manager: &Arc<DBusNetworkManager>,
device_path: &str,
interface: &str,
ssid: &S,
Expand Down
14 changes: 7 additions & 7 deletions src/device.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::fmt;
use std::rc::Rc;
use std::sync::Arc;

use dbus_nm::DBusNetworkManager;
use errors::*;
Expand All @@ -8,20 +8,20 @@ use wifi::{new_wifi_device, WiFiDevice};

#[derive(Clone)]
pub struct Device {
dbus_manager: Rc<DBusNetworkManager>,
dbus_manager: Arc<DBusNetworkManager>,
path: String,
interface: String,
device_type: DeviceType,
}

impl Device {
fn init(dbus_manager: &Rc<DBusNetworkManager>, path: &str) -> Result<Self> {
fn init(dbus_manager: &Arc<DBusNetworkManager>, path: &str) -> Result<Self> {
let interface = dbus_manager.get_device_interface(path)?;

let device_type = dbus_manager.get_device_type(path)?;

Ok(Device {
dbus_manager: Rc::clone(dbus_manager),
dbus_manager: Arc::clone(dbus_manager),
path: path.to_string(),
interface,
device_type,
Expand Down Expand Up @@ -225,7 +225,7 @@ impl From<i64> for DeviceState {
}
}

pub fn get_devices(dbus_manager: &Rc<DBusNetworkManager>) -> Result<Vec<Device>> {
pub fn get_devices(dbus_manager: &Arc<DBusNetworkManager>) -> Result<Vec<Device>> {
let device_paths = dbus_manager.get_devices()?;

let mut result = Vec::with_capacity(device_paths.len());
Expand All @@ -240,7 +240,7 @@ pub fn get_devices(dbus_manager: &Rc<DBusNetworkManager>) -> Result<Vec<Device>>
}

pub fn get_device_by_interface(
dbus_manager: &Rc<DBusNetworkManager>,
dbus_manager: &Arc<DBusNetworkManager>,
interface: &str,
) -> Result<Device> {
let path = dbus_manager.get_device_by_interface(interface)?;
Expand All @@ -249,7 +249,7 @@ pub fn get_device_by_interface(
}

pub fn get_active_connection_devices(
dbus_manager: &Rc<DBusNetworkManager>,
dbus_manager: &Arc<DBusNetworkManager>,
active_path: &str,
) -> Result<Vec<Device>> {
let device_paths = dbus_manager.get_active_connection_devices(active_path)?;
Expand Down
8 changes: 4 additions & 4 deletions src/manager.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::rc::Rc;
use std::sync::Arc;

use dbus_nm::DBusNetworkManager;
use errors::*;
Expand All @@ -8,19 +8,19 @@ use device::{get_device_by_interface, get_devices, Device};
use service::{get_service_state, start_service, stop_service, ServiceState};

pub struct NetworkManager {
dbus_manager: Rc<DBusNetworkManager>,
dbus_manager: Arc<DBusNetworkManager>,
}

impl NetworkManager {
pub fn new() -> Self {
NetworkManager {
dbus_manager: Rc::new(DBusNetworkManager::new(None)),
dbus_manager: Arc::new(DBusNetworkManager::new(None)),
}
}

pub fn with_method_timeout(timeout: u64) -> Self {
NetworkManager {
dbus_manager: Rc::new(DBusNetworkManager::new(Some(timeout))),
dbus_manager: Arc::new(DBusNetworkManager::new(Some(timeout))),
}
}

Expand Down
8 changes: 4 additions & 4 deletions src/wifi.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use std::net::Ipv4Addr;
use std::rc::Rc;
use std::sync::Arc;

use dbus_nm::DBusNetworkManager;
use errors::*;
Expand All @@ -9,7 +9,7 @@ use device::{Device, PathGetter};
use ssid::{AsSsidSlice, Ssid, SsidSlice};

pub struct WiFiDevice<'a> {
dbus_manager: Rc<DBusNetworkManager>,
dbus_manager: Arc<DBusNetworkManager>,
device: &'a Device,
}

Expand Down Expand Up @@ -186,11 +186,11 @@ bitflags! {
}

pub fn new_wifi_device<'a>(
dbus_manager: &Rc<DBusNetworkManager>,
dbus_manager: &Arc<DBusNetworkManager>,
device: &'a Device,
) -> WiFiDevice<'a> {
WiFiDevice {
dbus_manager: Rc::clone(dbus_manager),
dbus_manager: Arc::clone(dbus_manager),
device,
}
}
Expand Down

0 comments on commit 526ca95

Please sign in to comment.