refactor: use tokio watch channel for bindings
Build binaries / Build (arm-musleabi) (push) Successful in 1m41s
Build binaries / Build (aarch64-musl) (push) Successful in 1m42s
Build binaries / Build (armv7-musleabi) (push) Successful in 1m42s
Build binaries / Build (arm-musleabihf) (push) Successful in 1m42s
Build binaries / Build (armv7-musleabihf) (push) Successful in 1m41s
Build binaries / Build (i686-musl) (push) Successful in 1m42s
Build binaries / Build (mips-musl) (push) Successful in 1m52s
Build binaries / Build (mips64-muslabi64) (push) Successful in 1m51s
Build binaries / Build (mips64el-muslabi64) (push) Successful in 1m55s
Build binaries / Build (mipsel-musl) (push) Successful in 1m56s
Build binaries / Build (x86_64-musl) (push) Successful in 1m39s
Build binaries / Build (riscv64gc-musl) (push) Successful in 1m39s
Build binaries / Build (arm-musleabi) (push) Successful in 1m41s
Build binaries / Build (aarch64-musl) (push) Successful in 1m42s
Build binaries / Build (armv7-musleabi) (push) Successful in 1m42s
Build binaries / Build (arm-musleabihf) (push) Successful in 1m42s
Build binaries / Build (armv7-musleabihf) (push) Successful in 1m41s
Build binaries / Build (i686-musl) (push) Successful in 1m42s
Build binaries / Build (mips-musl) (push) Successful in 1m52s
Build binaries / Build (mips64-muslabi64) (push) Successful in 1m51s
Build binaries / Build (mips64el-muslabi64) (push) Successful in 1m55s
Build binaries / Build (mipsel-musl) (push) Successful in 1m56s
Build binaries / Build (x86_64-musl) (push) Successful in 1m39s
Build binaries / Build (riscv64gc-musl) (push) Successful in 1m39s
This commit is contained in:
4 files changed
+26
-24
No files matched your search
@@ -5,7 +5,6 @@ use std::{
|
||||
time::{Duration, Instant, SystemTime},
|
||||
};
|
||||
|
||||
use flume::Receiver;
|
||||
use icmp_socket2::{
|
||||
AsyncIcmpSocket, IcmpSocket4, Icmpv4Message, Icmpv4Packet,
|
||||
packet::{IcmpPacketBuildError, WithEchoRequest, WithTimestampRequest},
|
||||
@@ -13,7 +12,7 @@ use icmp_socket2::{
|
||||
};
|
||||
use log::debug;
|
||||
use thiserror::Error;
|
||||
use tokio::sync::mpsc::UnboundedSender;
|
||||
use tokio::sync::{mpsc::UnboundedSender, watch};
|
||||
|
||||
use crate::{
|
||||
measurement::model::{
|
||||
@@ -25,6 +24,7 @@ use crate::{
|
||||
time::{ClockSample, Realtime},
|
||||
};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct IcmpBinding {
|
||||
pub stream: MeasurementStream,
|
||||
pub schedule: ProbeSchedule,
|
||||
@@ -104,7 +104,7 @@ pub struct IcmpEngine {
|
||||
|
||||
origin: Instant,
|
||||
|
||||
binding_rx: Receiver<Vec<IcmpBinding>>,
|
||||
binding_rx: watch::Receiver<Vec<IcmpBinding>>,
|
||||
observation_tx: UnboundedSender<MeasurementEvent>,
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@ impl IcmpEngine {
|
||||
origin: Instant,
|
||||
#[allow(unused)] settings: &NetworkSettings,
|
||||
observation_tx: UnboundedSender<MeasurementEvent>,
|
||||
binding_rx: Receiver<Vec<IcmpBinding>>,
|
||||
binding_rx: watch::Receiver<Vec<IcmpBinding>>,
|
||||
) -> Result<Self, IcmpError> {
|
||||
#[allow(unused_mut)]
|
||||
let mut socket = IcmpSocket4::new()?;
|
||||
@@ -446,10 +446,10 @@ impl IcmpEngine {
|
||||
let deadline = self.next_deadline();
|
||||
|
||||
tokio::select! {
|
||||
bindings = self.binding_rx.recv_async() => {
|
||||
let bindings = bindings
|
||||
.map_err(|_| IcmpError::BindingChannelClosed)?;
|
||||
bindings = self.binding_rx.changed() => {
|
||||
bindings.map_err(|_| IcmpError::BindingChannelClosed)?;
|
||||
|
||||
let bindings = self.binding_rx.borrow_and_update().clone();
|
||||
self.set_bindings(bindings)?;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user