diff --git a/util/io/src/service.rs b/util/io/src/service.rs index da2e653ec..965a7d08e 100644 --- a/util/io/src/service.rs +++ b/util/io/src/service.rs @@ -433,6 +433,9 @@ impl IoService where Message: Send + Sync + Clone + 'static { impl Drop for IoService where Message: Send + Sync + Clone { fn drop(&mut self) { trace!(target: "shutdown", "[IoService] Closing..."); + // Clear handlers so that shared pointers are not stuck on stack + // in Channel::send_sync + self.handlers.write().clear(); self.host_channel.lock().send(IoMessage::Shutdown).unwrap_or_else(|e| warn!("Error on IO service shutdown: {:?}", e)); if let Some(thread) = self.thread.take() { thread.join().unwrap_or_else(|e| {