From dcb6ad97b2bff4ab7b270a6f95fe41126f9432a6 Mon Sep 17 00:00:00 2001 From: Kyle Simpson Date: Sun, 17 Jan 2021 20:12:55 +0000 Subject: [PATCH] Driver: Fix noisy errors, UDP message send failure spam. Closes #26. This will also prevent a full reconnect failure from endlessly spamming attempts and error logs. I'll follow this up by looking into decent reconnection strategies, although sadly these won't be configurable until the next semver break due to an oversight on my part. --- src/driver/tasks/message/mod.rs | 2 +- src/driver/tasks/mixer.rs | 24 +++++++++++++++++------- src/driver/tasks/udp_tx.rs | 6 +++++- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/driver/tasks/message/mod.rs b/src/driver/tasks/message/mod.rs index f769efb..d697e7f 100644 --- a/src/driver/tasks/message/mod.rs +++ b/src/driver/tasks/message/mod.rs @@ -25,8 +25,8 @@ impl Interconnect { } pub fn poison_all(&self) { - self.poison(); let _ = self.mixer.send(MixerMessage::Poison); + self.poison(); } pub fn restart_volatile_internals(&mut self) { diff --git a/src/driver/tasks/mixer.rs b/src/driver/tasks/mixer.rs index d552e12..cf85707 100644 --- a/src/driver/tasks/mixer.rs +++ b/src/driver/tasks/mixer.rs @@ -228,21 +228,31 @@ impl Mixer { // event failure? rebuild interconnect. // ws or udp failure? full connect // (soft reconnect is covered by the ws task.) + // + // in both cases, send failure is fatal, + // but will only occur on disconnect. + // expecting this is fairly noisy, so exit silently. if events_failure { self.prevent_events = true; - self.interconnect + let sent = self + .interconnect .core - .send(CoreMessage::RebuildInterconnect) - .expect("FATAL: No way to rebuild driver core from mixer."); + .send(CoreMessage::RebuildInterconnect); events_failure = false; + + if sent.is_err() { + break; + } } if conn_failure { - self.interconnect - .core - .send(CoreMessage::FullReconnect) - .expect("FATAL: No way to rebuild driver core from mixer."); + self.conn_active = None; + let sent = self.interconnect.core.send(CoreMessage::FullReconnect); conn_failure = false; + + if sent.is_err() { + break; + } } } } diff --git a/src/driver/tasks/udp_tx.rs b/src/driver/tasks/udp_tx.rs index ac3962e..4fd49f2 100644 --- a/src/driver/tasks/udp_tx.rs +++ b/src/driver/tasks/udp_tx.rs @@ -36,7 +36,11 @@ pub(crate) async fn runner(udp_msg_rx: Receiver, ssrc: u32, udp_tx error!("Fatal UDP packet send error: {:?}.", e); break; }, - Ok(Err(_)) | Ok(Ok(Poison)) => { + Ok(Err(e)) => { + error!("Fatal UDP packet receive error: {:?}.", e); + break; + }, + Ok(Ok(Poison)) => { break; }, }