From e6fd11604d13fcb5d96f67f7f6a246be528d619f Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Mon, 2 Nov 2026 21:51:46 +0100 Subject: [PATCH] daemon: Fix hybrid cancellation handling We get `false` from `is_ceremony_terminating` so that branch was never taken. --- CHANGELOG.md | 1 + credentialsd/src/credential_service/hybrid.rs | 11 +++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b7fe72..a86b572 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - ui: Basic recovery from failed attempts to use devices (e.g. flaky bluetooth) - build: Make daemon, credentialsd-ui, demo client and web extension optional - build: Rename `default` profile to `release`. +- daemon: Fix hybrid cancellation handling # 0.3.1 [2026-09-05] diff --git a/credentialsd/src/credential_service/hybrid.rs b/credentialsd/src/credential_service/hybrid.rs index 97f0c5b..e9b1104 100644 --- a/credentialsd/src/credential_service/hybrid.rs +++ b/credentialsd/src/credential_service/hybrid.rs @@ -107,15 +107,14 @@ impl HybridHandler for InternalHybridHandler { let _ = tx.send(HybridStateInternal::Completed(auth_response)).await; break; } + Err(CredentialServiceError::NonTerminatingCancellation) => { + tracing::trace!("Hybrid handler cancelled, exiting silently"); + break; + } Err(err) if super::is_ceremony_terminating(&err) => { // Terminating errors (CredentialExcluded, NonTerminatingCancellation // from a winning transport, etc.) stop the loop. - // NonTerminatingCancellation exits silently; others surface as Failed. - if !matches!(err, CredentialServiceError::NonTerminatingCancellation) { - let _ = tx.send(HybridStateInternal::Failed(err)).await; - } else { - tracing::debug!("Hybrid handler cancelled, exiting silently"); - } + let _ = tx.send(HybridStateInternal::Failed(err)).await; break; } Err(err) => {