From 4c47a620d6a1c5ced5df7a4953e4bc38a8f13a7a Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 11 Jun 2024 17:29:03 +0200 Subject: [PATCH] Retraction of nonexistent handle is OK in relay --- syndicate/src/relay.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/syndicate/src/relay.rs b/syndicate/src/relay.rs index 80f09b9..29b985d 100644 --- a/syndicate/src/relay.rs +++ b/syndicate/src/relay.rs @@ -427,14 +427,19 @@ impl TunnelRelay { } P::Event::Retract(b) => { let P::Retract { handle: remote_handle } = *b; - let (local_handle, previous_pins) = match self.inbound_assertions.remove(&remote_handle) { - None => return Err(error("Retraction of nonexistent handle", language().unparse(&remote_handle)))?, - Some(wss) => wss, - }; - self.membranes.release(previous_pins); - self.membranes.release(pins); - t.retract(local_handle); - dump_membranes!(self.membranes); + match self.inbound_assertions.remove(&remote_handle) { + None => { + // This can happen when e.g. an assertion previously made + // failed to pass an attenuation filter + tracing::debug!(?remote_handle, "Retraction of nonexistent handle"); + } + Some((local_handle, previous_pins)) => { + self.membranes.release(previous_pins); + self.membranes.release(pins); + t.retract(local_handle); + dump_membranes!(self.membranes); + } + } } P::Event::Message(b) => { let P::Message { body: P::Assertion(a) } = *b;