udp: return errors from threads instead of panicking in some cases

This commit is contained in:
Joakim Frostegård 2024-01-29 22:17:30 +01:00
parent ae75d0cbe4
commit 1967d8aa3e
2 changed files with 10 additions and 16 deletions

View file

@ -2,6 +2,7 @@ use std::io::{Cursor, ErrorKind};
use std::sync::atomic::Ordering; use std::sync::atomic::Ordering;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use anyhow::Context;
use aquatic_common::access_list::AccessListCache; use aquatic_common::access_list::AccessListCache;
use aquatic_common::ServerStartInstant; use aquatic_common::ServerStartInstant;
use mio::net::UdpSocket; use mio::net::UdpSocket;
@ -58,8 +59,7 @@ impl SocketWorker {
response_receiver: ConnectedResponseReceiver, response_receiver: ConnectedResponseReceiver,
priv_dropper: PrivilegeDropper, priv_dropper: PrivilegeDropper,
) -> anyhow::Result<()> { ) -> anyhow::Result<()> {
let socket = let socket = UdpSocket::from_std(create_socket(&config, priv_dropper)?);
UdpSocket::from_std(create_socket(&config, priv_dropper).expect("create socket"));
let access_list_cache = create_access_list_cache(&shared_state.access_list); 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()); 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(), pending_requests: Default::default(),
}; };
worker.run_inner(); worker.run_inner()
Ok(())
} }
pub fn run_inner(&mut self) { pub fn run_inner(&mut self) -> anyhow::Result<()> {
let mut events = Events::with_capacity(1); 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() poll.registry()
.register(&mut self.socket, Token(0), Interest::READABLE) .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); let poll_timeout = Duration::from_millis(self.config.network.poll_timeout_ms);
@ -108,8 +106,7 @@ impl SocketWorker {
loop { loop {
match self.polling_mode { match self.polling_mode {
PollMode::Regular => { PollMode::Regular => {
poll.poll(&mut events, Some(poll_timeout)) poll.poll(&mut events, Some(poll_timeout)).context("poll")?;
.expect("failed polling");
for event in events.iter() { for event in events.iter() {
if event.is_readable() { if event.is_readable() {

View file

@ -60,13 +60,10 @@ pub fn run_statistics_worker(
let opt_tt = if config.statistics.write_html_to_file { let opt_tt = if config.statistics.write_html_to_file {
let mut tt = TinyTemplate::new(); let mut tt = TinyTemplate::new();
if let Err(err) = tt.add_template(TEMPLATE_KEY, TEMPLATE_CONTENTS) { tt.add_template(TEMPLATE_KEY, TEMPLATE_CONTENTS)
::log::error!("Couldn't parse statistics html template: {:#}", err); .context("parse statistics html template")?;
None
} else {
Some(tt) Some(tt)
}
} else { } else {
None None
}; };