mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 08:45:41 +08:00
refactor: replace CommandChildGuard with CommandChild and simplify related methods
This commit is contained in:
@@ -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)));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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;
|
|
||||||
|
|||||||
Reference in New Issue
Block a user