diff --git a/util/io/src/service.rs b/util/io/src/service.rs index d7bba5b4d..6086acadd 100644 --- a/util/io/src/service.rs +++ b/util/io/src/service.rs @@ -394,7 +394,7 @@ impl IoChannel where Message: Send + Clone + Sync + 'static { /// 'Message' is a notification message type pub struct IoService where Message: Send + Sync + Clone + 'static { panic_handler: Arc, - thread: Option>, + thread: Mutex>>, host_channel: Mutex>>, handlers: Arc>, HandlerId>>>, } @@ -424,19 +424,19 @@ impl IoService where Message: Send + Sync + Clone + 'static { }); Ok(IoService { panic_handler: panic_handler, - thread: Some(thread), + thread: Mutex::new(Some(thread)), host_channel: Mutex::new(channel), handlers: handlers, }) } - pub fn stop(&mut self) { + pub fn stop(&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() { + if let Some(thread) = self.thread.lock().take() { thread.join().unwrap_or_else(|e| { debug!(target: "shutdown", "Error joining IO service event loop thread: {:?}", e); });