From 81b0c84e378864a4de2168325c32edd56b284ab1 Mon Sep 17 00:00:00 2001 From: SpikeHD <25207995+SpikeHD@users.noreply.github.com> Date: Fri, 23 Oct 2026 13:05:38 -0700 Subject: [PATCH] fix: prevent deadlock when restarting --- src/runtime.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/runtime.rs b/src/runtime.rs index c02cf87..79f9b1b 100644 --- a/src/runtime.rs +++ b/src/runtime.rs @@ -217,6 +217,15 @@ impl RuntimeContext { } pub(crate) fn send_message(&self, message: Message) -> Result<()> { + // Exit requests are always queued because inline dispatch from a command handler + // holding the plugin store mutex re-locks it in `on_event_loop_event`, creating + // a deadlock. + if matches!(message, Message::RequestExit(_)) { + self.sender.send(message).map_err(|_| Error::FailedToSendMessage)?; + self.proxy.wake_up(); + return Ok(()); + } + let message = if self.is_main_thread() { match handle_main_thread_message(self, message) { Ok(()) => return Ok(()),