diff --git a/src/controller.rs b/src/controller.rs index 1573c13..ea3b027 100644 --- a/src/controller.rs +++ b/src/controller.rs @@ -5,8 +5,9 @@ use std::{ time::Duration, }; -use flume::{Receiver, SendError, Sender}; +use flume::{SendError, Sender}; use thiserror::Error; +use tokio::sync::mpsc::UnboundedReceiver; #[cfg(feature = "irtt")] use crate::measurement::irtt::IrttBinding; @@ -28,7 +29,7 @@ pub enum ControllerError { } pub struct Controller { - reflector_rx: Receiver>, + reflector_rx: UnboundedReceiver>, icmp_binding_tx: Sender>, #[cfg(feature = "irtt")] irtt_binding_tx: Sender>, @@ -43,7 +44,7 @@ pub struct Controller { impl Controller { pub fn new( - reflector_rx: Receiver>, + reflector_rx: UnboundedReceiver>, icmp_binding_tx: Sender>, #[cfg(feature = "irtt")] irtt_binding_tx: Sender>, reflectors: HashMap, @@ -69,7 +70,7 @@ impl Controller { pub async fn run(mut self, initial_reflectors: Vec) -> Result<(), ControllerError> { self.update_reflectors(initial_reflectors).await?; - while let Ok(reflectors) = self.reflector_rx.recv_async().await { + while let Some(reflectors) = self.reflector_rx.recv().await { self.update_reflectors(reflectors).await?; } Ok(()) diff --git a/src/main.rs b/src/main.rs index 9046337..50b0c70 100644 --- a/src/main.rs +++ b/src/main.rs @@ -352,7 +352,7 @@ fn run(settings: &Settings) -> anyhow::Result<()> { #[cfg(feature = "irtt")] let (irtt_binding_tx, irtt_binding_rx) = flume::unbounded(); let (measurement_tx, measurement_rx) = tokio::sync::mpsc::unbounded_channel(); - let (reflector_tx, reflector_rx) = flume::unbounded(); + let (reflector_tx, reflector_rx) = tokio::sync::mpsc::unbounded_channel(); let (reselect_tx, reselect_rx) = flume::bounded(1); let (selection_snapshot_tx, selection_snapshot_rx) = if reselection_enabled { let (tx, rx) = flume::unbounded(); diff --git a/src/reflector_selector.rs b/src/reflector_selector.rs index 31899c6..0475cb4 100644 --- a/src/reflector_selector.rs +++ b/src/reflector_selector.rs @@ -11,13 +11,14 @@ use crate::measurement::model::MeasurementStream; use crate::metrics::{Metric, MetricsSender}; use crate::settings::Settings; use crate::util::RwLockExt; -use flume::{Receiver, RecvError, RecvTimeoutError, Selector, Sender}; +use flume::{Receiver, RecvError, RecvTimeoutError, Selector}; use log::{debug, info}; use std::net::SocketAddr; use std::sync::atomic::Ordering; use std::sync::{Arc, RwLock}; use std::thread::sleep; use std::time::{Duration, Instant}; +use tokio::sync::mpsc::UnboundedSender; enum SelectorEvent { Trigger(Result), @@ -115,7 +116,7 @@ pub struct ReflectorSelector { pub settings: Settings, pub snapshot_rx: Receiver, pub reflector_peers_lock: Arc>>, - pub reflector_tx: Sender>, + pub reflector_tx: UnboundedSender>, pub reflector_pool: Vec, pub endpoint_streams: Arc>>, pub trigger_channel: Receiver,