From cb1a9107623c806ebf61e586638ede3ef0e7f4a0 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Sun, 10 May 2026 12:37:44 +0000 Subject: [PATCH] fix: guard StremioServer::start() with a running flag --- src/stremio_app/stremio_server/server.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/stremio_app/stremio_server/server.rs b/src/stremio_app/stremio_server/server.rs index 922a416..01f8063 100644 --- a/src/stremio_app/stremio_server/server.rs +++ b/src/stremio_app/stremio_server/server.rs @@ -8,7 +8,10 @@ use std::{ os::windows::process::CommandExt, path, process::{Command, Stdio}, - sync::{Arc, Mutex, Once}, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, Mutex, Once, + }, thread, }; use winapi::um::{ @@ -71,6 +74,7 @@ pub struct StremioServer { parent: nwg::ControlHandle, crash_notice: nwg::Notice, logs: Arc>, + running: Arc, } impl StremioServer { @@ -78,9 +82,14 @@ impl StremioServer { if self.development { return; } + if self.running.swap(true, Ordering::SeqCst) { + eprintln!("StremioServer::start() called while a server is already running; skipping"); + return; + } let (tx, rx) = flume::unbounded(); let logs = self.logs.clone(); let sender = self.crash_notice.sender(); + let running = self.running.clone(); ensure_parent_job_object(); @@ -205,6 +214,8 @@ impl StremioServer { let mut logs = logs.lock().unwrap(); *logs = lines.lock().unwrap().deref().to_string(); } + // Clear before sender.notice() so the next start() can pass the swap guard. + running.store(false, Ordering::SeqCst); println!("Server terminated."); sender.notice(); });