From 1967d8aa3e8d08499d3dbefe9b085c12555cdb4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Mon, 29 Jan 2024 22:17:30 +0100 Subject: [PATCH] udp: return errors from threads instead of panicking in some cases --- crates/udp/src/workers/socket/mio.rs | 17 +++++++---------- crates/udp/src/workers/statistics/mod.rs | 9 +++------ 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/crates/udp/src/workers/socket/mio.rs b/crates/udp/src/workers/socket/mio.rs index b24ab94..05f90fa 100644 --- a/crates/udp/src/workers/socket/mio.rs +++ b/crates/udp/src/workers/socket/mio.rs @@ -2,6 +2,7 @@ use std::io::{Cursor, ErrorKind}; use std::sync::atomic::Ordering; use std::time::{Duration, Instant}; +use anyhow::Context; use aquatic_common::access_list::AccessListCache; use aquatic_common::ServerStartInstant; use mio::net::UdpSocket; @@ -58,8 +59,7 @@ impl SocketWorker { response_receiver: ConnectedResponseReceiver, priv_dropper: PrivilegeDropper, ) -> anyhow::Result<()> { - let socket = - UdpSocket::from_std(create_socket(&config, priv_dropper).expect("create socket")); + let socket = UdpSocket::from_std(create_socket(&config, priv_dropper)?); let access_list_cache = create_access_list_cache(&shared_state.access_list); let opt_resend_buffer = (config.network.resend_buffer_max_len > 0).then_some(Vec::new()); @@ -79,18 +79,16 @@ impl SocketWorker { pending_requests: Default::default(), }; - worker.run_inner(); - - Ok(()) + worker.run_inner() } - pub fn run_inner(&mut self) { + pub fn run_inner(&mut self) -> anyhow::Result<()> { let mut events = Events::with_capacity(1); - let mut poll = Poll::new().expect("create poll"); + let mut poll = Poll::new().context("create poll")?; poll.registry() .register(&mut self.socket, Token(0), Interest::READABLE) - .expect("register poll"); + .context("register poll")?; let poll_timeout = Duration::from_millis(self.config.network.poll_timeout_ms); @@ -108,8 +106,7 @@ impl SocketWorker { loop { match self.polling_mode { PollMode::Regular => { - poll.poll(&mut events, Some(poll_timeout)) - .expect("failed polling"); + poll.poll(&mut events, Some(poll_timeout)).context("poll")?; for event in events.iter() { if event.is_readable() { diff --git a/crates/udp/src/workers/statistics/mod.rs b/crates/udp/src/workers/statistics/mod.rs index c4f98b4..7600b33 100644 --- a/crates/udp/src/workers/statistics/mod.rs +++ b/crates/udp/src/workers/statistics/mod.rs @@ -60,13 +60,10 @@ pub fn run_statistics_worker( let opt_tt = if config.statistics.write_html_to_file { let mut tt = TinyTemplate::new(); - if let Err(err) = tt.add_template(TEMPLATE_KEY, TEMPLATE_CONTENTS) { - ::log::error!("Couldn't parse statistics html template: {:#}", err); + tt.add_template(TEMPLATE_KEY, TEMPLATE_CONTENTS) + .context("parse statistics html template")?; - None - } else { - Some(tt) - } + Some(tt) } else { None };