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; }, }