refactor: replace CommandChildGuard with CommandChild and simplify related methods

This commit is contained in:
Tunglies
2025-11-19 22:11:22 +08:00
parent d808e59156
commit 108a05ce96
4 changed files with 13 additions and 40 deletions

View File

@@ -5,8 +5,8 @@ mod state;
use anyhow::Result; use anyhow::Result;
use arc_swap::{ArcSwap, ArcSwapOption}; use arc_swap::{ArcSwap, ArcSwapOption};
use std::{fmt, sync::Arc, time::Instant}; use std::{fmt, sync::Arc, time::Instant};
use tauri_plugin_shell::process::CommandChild;
use crate::process::CommandChildGuard;
use crate::singleton_lazy; use crate::singleton_lazy;
#[derive(Debug, serde::Serialize, PartialEq, Eq)] #[derive(Debug, serde::Serialize, PartialEq, Eq)]
@@ -35,7 +35,7 @@ pub struct CoreManager {
#[derive(Debug)] #[derive(Debug)]
struct State { struct State {
running_mode: ArcSwap<RunningMode>, running_mode: ArcSwap<RunningMode>,
child_sidecar: ArcSwapOption<CommandChildGuard>, child_sidecar: ArcSwapOption<CommandChild>,
} }
impl Default for State { impl Default for State {
@@ -61,7 +61,7 @@ impl CoreManager {
Arc::clone(&self.state.load().running_mode.load()) Arc::clone(&self.state.load().running_mode.load())
} }
pub fn take_child_sidecar(&self) -> Option<CommandChildGuard> { pub fn take_child_sidecar(&self) -> Option<CommandChild> {
self.state self.state
.load() .load()
.child_sidecar .child_sidecar
@@ -78,7 +78,7 @@ impl CoreManager {
state.running_mode.store(Arc::new(mode)); state.running_mode.store(Arc::new(mode));
} }
pub fn set_running_child_sidecar(&self, child: CommandChildGuard) { pub fn set_running_child_sidecar(&self, child: CommandChild) {
let state = self.state.load(); let state = self.state.load();
state.child_sidecar.store(Some(Arc::new(child))); state.child_sidecar.store(Some(Arc::new(child)));
} }

View File

@@ -4,7 +4,6 @@ use crate::{
config::Config, config::Config,
core::{handle, logger::CLASH_LOGGER, service}, core::{handle, logger::CLASH_LOGGER, service},
logging, logging,
process::CommandChildGuard,
utils::{dirs, init::sidecar_writer}, utils::{dirs, init::sidecar_writer},
}; };
use anyhow::Result; use anyhow::Result;
@@ -46,7 +45,7 @@ impl CoreManager {
let pid = child.pid(); let pid = child.pid();
logging!(trace, Type::Core, "Sidecar started with PID: {}", pid); logging!(trace, Type::Core, "Sidecar started with PID: {}", pid);
self.set_running_child_sidecar(CommandChildGuard::new(child)); self.set_running_child_sidecar(child);
self.set_running_mode(RunningMode::Sidecar); self.set_running_mode(RunningMode::Sidecar);
let shared_writer: SharedWriter = let shared_writer: SharedWriter =
@@ -100,8 +99,14 @@ impl CoreManager {
} }
if let Some(child) = self.take_child_sidecar() { if let Some(child) = self.take_child_sidecar() {
let pid = child.pid(); let pid = child.pid();
drop(child); let result = child.kill();
logging!(trace, Type::Core, "Sidecar stopped (PID: {:?})", pid); logging!(
trace,
Type::Core,
"Sidecar stopped (PID: {:?}, Result: {:?})",
pid,
result
);
} }
} }

View File

@@ -1,30 +0,0 @@
use tauri_plugin_shell::process::CommandChild;
#[derive(Debug)]
pub struct CommandChildGuard(Option<CommandChild>);
impl Drop for CommandChildGuard {
#[inline]
fn drop(&mut self) {
self.kill();
}
}
impl CommandChildGuard {
#[inline]
pub const fn new(child: CommandChild) -> Self {
Self(Some(child))
}
#[inline]
pub fn kill(&mut self) {
if let Some(child) = self.0.take() {
let _ = child.kill();
}
}
#[inline]
pub fn pid(&self) -> Option<u32> {
self.0.as_ref().map(|c| c.pid())
}
}

View File

@@ -1,4 +1,2 @@
mod async_handler; mod async_handler;
pub use async_handler::AsyncHandler; pub use async_handler::AsyncHandler;
mod guard;
pub use guard::CommandChildGuard;