From 38342eac44c97612f9c0206db4108bd09ab460c9 Mon Sep 17 00:00:00 2001 From: trivernis Date: Sun, 6 Feb 2022 15:07:32 +0100 Subject: [PATCH] Fix dangling response listeners Signed-off-by: trivernis --- src/ipc/mod.rs | 3 +++ src/ipc/stream_emitter/emit_metadata_with_response_stream.rs | 1 + 2 files changed, 4 insertions(+) diff --git a/src/ipc/mod.rs b/src/ipc/mod.rs index 39b4ca5d..8efcc30f 100644 --- a/src/ipc/mod.rs +++ b/src/ipc/mod.rs @@ -62,6 +62,7 @@ async fn handle_connection( /// Handles a single event in a different tokio context fn handle_event(mut ctx: Context, handler: Arc, event: Event) { ctx.set_ref_id(Some(event.id())); + let event_id = event.id(); tokio::spawn(async move { match handler.handle_event(&ctx, event).await { @@ -74,6 +75,8 @@ fn handle_event(mut ctx: Context, handler: Arc, event: Event) { { tracing::error!("Error occurred when sending error response: {:?}", e); } + let mut reply_listeners = ctx.reply_listeners.lock().await; + reply_listeners.remove(&event_id); } Err(e) => { // emit an error event diff --git a/src/ipc/stream_emitter/emit_metadata_with_response_stream.rs b/src/ipc/stream_emitter/emit_metadata_with_response_stream.rs index 8ef0de3d..339e9773 100644 --- a/src/ipc/stream_emitter/emit_metadata_with_response_stream.rs +++ b/src/ipc/stream_emitter/emit_metadata_with_response_stream.rs @@ -20,6 +20,7 @@ pub struct EmitMetadataWithResponseStream { pub(crate) emit_metadata: Option>, } +/// An asynchronous stream one can read all responses to a specific event from. pub struct ResponseStream { event_id: u64, ctx: Option,