From 90463729da52b35d169fc37ecef38a0cd4ae45eb Mon Sep 17 00:00:00 2001 From: Vladimir Borisov Date: Wed, 14 Jul 2021 18:28:41 +0300 Subject: [PATCH] Better error handling and fixed var names --- .../stremio_server/stremio_server.rs | 70 +++++++++---------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/src/stremio_app/stremio_server/stremio_server.rs b/src/stremio_app/stremio_server/stremio_server.rs index db273f9..9f034c8 100644 --- a/src/stremio_app/stremio_server/stremio_server.rs +++ b/src/stremio_app/stremio_server/stremio_server.rs @@ -1,64 +1,60 @@ use std::process::Command; -use std::thread; - use std::sync::{Arc, Mutex}; +use std::thread; use std::time::Duration; +use winapi::um::handleapi::CloseHandle; use winapi::um::processthreadsapi::{OpenProcess, TerminateProcess}; use winapi::um::winnt::PROCESS_TERMINATE; -use winapi::um::handleapi::CloseHandle; pub struct StremioServer { - should_stop: Arc>, - handle: Option>, + pid_mutex: Arc>, } impl StremioServer { pub fn new() -> StremioServer { let server_pid_mutex = Arc::new(Mutex::new(0)); let server_pid_mutex2 = server_pid_mutex.clone(); - StremioServer { - should_stop: server_pid_mutex, - handle: Some(thread::spawn(move || loop { - let mut child = Command::new("node") - .arg("server.js") - .spawn() - .expect("Cannot run the server"); - { - let mut kill_request = server_pid_mutex2.lock().unwrap(); - *kill_request = child.id(); - }; - let _status = child.wait().expect("Cannot wait for the server"); - let kill_request = server_pid_mutex2.lock().unwrap(); - if *kill_request == 0 { + thread::spawn(move || loop { + let mut child = Command::new("node") + .arg("server.js") + .spawn() + .expect("Cannot run the server"); + { + let mut server_pid = server_pid_mutex2 + .lock() + .expect("Trying to lock the mutex twice"); + *server_pid = child.id(); + }; + child.wait().expect("Cannot wait for the server"); + { + let server_pid = server_pid_mutex2 + .lock() + .expect("Trying to lock the mutex twice"); + if *server_pid == 0 { dbg!("Exit server guard loop..."); break; } - thread::sleep(Duration::from_millis(500)); - dbg!("Trying to restart the server..."); - })), + }; + thread::sleep(Duration::from_millis(500)); + dbg!("Trying to restart the server..."); + }); + StremioServer { + pid_mutex: server_pid_mutex, } } - pub fn try_kill(mut self) { + pub fn try_kill(&self) { dbg!("Trying to kill the server..."); - let should_stop = self.should_stop.clone(); - let mut tremination_request = should_stop.lock().unwrap(); + let servr_pid_mutex = self.pid_mutex.clone(); + let mut server_pid = servr_pid_mutex + .lock() + .expect("Trying to lock the mutex twice"); unsafe { - let handle = OpenProcess(PROCESS_TERMINATE, 0, *tremination_request); + let handle = OpenProcess(PROCESS_TERMINATE, 0, *server_pid); if !handle.is_null() { TerminateProcess(handle, 101); CloseHandle(handle); } } - *tremination_request = 0; - - drop(self.handle.take()) - // .map(thread::JoinHandle::join); + *server_pid = 0; } } - -// impl Drop for StremioServer { -// fn drop(&mut self) { -// dbg!("Server dropped!"); -// self.try_kill(); -// } -// }