diff --git a/rpc/src/v1/impls/eth_pubsub.rs b/rpc/src/v1/impls/eth_pubsub.rs index 7dc860748..39ae8754d 100644 --- a/rpc/src/v1/impls/eth_pubsub.rs +++ b/rpc/src/v1/impls/eth_pubsub.rs @@ -64,13 +64,15 @@ impl EthPubSubClient where F: 'static + Fn(SyncState) -> Option + Send { - let handler = self.handler.clone(); + let weak_handler = Arc::downgrade(&self.handler); self.handler.executor.spawn( receiver.for_each(move |state| { if let Some(status) = f(state) { - handler.notify_syncing(status); - return Ok(()) + if let Some(handler) = weak_handler.upgrade() { + handler.notify_syncing(status); + return Ok(()) + } } Err(()) })