Use a RwLock instead of a Mutex for the peers

This commit is contained in:
Nils Andreas Svee committed 2022-09-28 00:43:48 +02:00
1 parent e3b7b7e9ba
commit 9219ac690a
4 files changed
+16 -16

No files matched your search

+5 -5
View File
@@ -8,7 +8,7 @@ use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddrV4, SocketAddrV6};
use std::os::unix::io::RawFd;
use std::str::FromStr;
use std::sync::mpsc::Sender;
use std::sync::{Arc, Mutex};
use std::sync::{Arc, Mutex, RwLock};
use std::thread;
use std::time::Duration;
@@ -59,7 +59,7 @@ pub trait PingListener {
fn listen(
&mut self,
type_: SocketType,
reflectors_lock: Arc<Mutex<Vec<IpAddr>>>,
reflectors_lock: Arc<RwLock<Vec<IpAddr>>>,
stats_sender: Sender<PingReply>,
) -> Result<(), Box<dyn Error>> {
let socket = open_socket(type_)?;
@@ -80,7 +80,7 @@ pub trait PingListener {
let addr_bytes = sender.expect("Should be an address here").ip();
let addr = IpAddr::from(addr_bytes.to_be_bytes());
let reflectors = reflectors_lock.lock().unwrap();
let reflectors = reflectors_lock.read().unwrap();
if !reflectors.contains(&addr) {
continue;
}
@@ -112,7 +112,7 @@ pub trait PingSender {
fn send(
&mut self,
type_: SocketType,
reflectors_lock: Arc<Mutex<Vec<IpAddr>>>,
reflectors_lock: Arc<RwLock<Vec<IpAddr>>>,
) -> Result<(), Box<dyn Error>> {
let socket = open_socket(type_)?;
@@ -121,7 +121,7 @@ pub trait PingSender {
let sleep_duration = Duration::from_millis(tick_duration_ms as u64);
loop {
let reflectors_unlocked = reflectors_lock.lock().unwrap();
let reflectors_unlocked = reflectors_lock.read().unwrap();
let reflectors = reflectors_unlocked.clone();
drop(reflectors_unlocked);