From b0f805dde9eed3da0c0847bf16c54b3d3e60b70a Mon Sep 17 00:00:00 2001 From: wisp3rwind <17089248+wisp3rwind@users.noreply.github.com> Date: Thu, 19 Dec 2024 16:27:03 +0100 Subject: [PATCH] discovery: don't panic on libmdns errors On panic, the discovery task crashes, but the main program is not notified of this. Returning an error will result in the Discovery stream yielding None, serving as notification to the application (which might shutdown with error, for example, if no other means of authentication is available). --- CHANGELOG.md | 3 ++- discovery/src/lib.rs | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72710acc0..a9821e2c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,7 +29,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 on Android platform. - [core] Fix "Invalid Credentials" when using a Keymaster access token and client ID on Android platform. -= [connect] Fix "play" command not handled if missing "offset" property +- [connect] Fix "play" command not handled if missing "offset" property +- [discovery] Fix libmdns zerconf setup errors not propagating to the main task. ### Removed diff --git a/discovery/src/lib.rs b/discovery/src/lib.rs index d829e0f57..c6d88a2e7 100644 --- a/discovery/src/lib.rs +++ b/discovery/src/lib.rs @@ -396,7 +396,7 @@ fn launch_libmdns( let task_handle = tokio::task::spawn_blocking(move || { let inner = move || -> Result<(), DiscoveryError> { - let svc = if !zeroconf_ip.is_empty() { + let responder = if !zeroconf_ip.is_empty() { libmdns::Responder::spawn_with_ip_list( &tokio::runtime::Handle::current(), zeroconf_ip, @@ -404,9 +404,9 @@ fn launch_libmdns( } else { libmdns::Responder::spawn(&tokio::runtime::Handle::current()) } - .map_err(|e| DiscoveryError::DnsSdError(Box::new(e))) - .unwrap() - .register( + .map_err(|e| DiscoveryError::DnsSdError(Box::new(e)))?; + + let svc = responder.register( DNS_SD_SERVICE_NAME.to_owned(), name.into_owned(), port,