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

This commit is contained in:
Nils Andreas Svee committed 2026-10-28 20:29:33 +07:00
1 parent 22e6c05dc6
commit 74288ba3b3
4 files changed
+26 -24

No files matched your search

+7 -7
View File
@@ -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)?;
}