fix: upgrade mihomo core failed (#5646)

* fix: upgrade mihomo core failed

* fix: upgrade core failed when run core by service

* fix: app freeze when restart core on windows

* deps: bump clash-verge-rev-ipc version lock

---------

Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com>
This commit is contained in:
oomeow
2025-12-03 21:48:30 +08:00
committed by GitHub
co-authored by Tunglies
parent 29cf57d4b9
commit 9388b73c1f
9 changed files with 40 additions and 61 deletions
+2 -9
View File
@@ -2,10 +2,8 @@ use super::{CoreManager, RunningMode};
use crate::cmd::StringifyErr as _;
use crate::config::{Config, IVerge};
use crate::core::handle::Handle;
use crate::core::{
logger::CLASH_LOGGER,
service::{SERVICE_MANAGER, ServiceStatus},
};
use crate::core::manager::CLASH_LOGGER;
use crate::core::service::{SERVICE_MANAGER, ServiceStatus};
use anyhow::Result;
use clash_verge_logging::{Type, logging};
use scopeguard::defer;
@@ -44,11 +42,6 @@ impl CoreManager {
pub async fn restart_core(&self) -> Result<()> {
logging!(info, Type::Core, "Restarting core");
self.stop_core().await?;
if SERVICE_MANAGER.lock().await.init().await.is_ok() {
let _ = SERVICE_MANAGER.lock().await.refresh().await;
}
self.start_core().await
}
+4
View File
@@ -4,11 +4,15 @@ mod state;
use anyhow::Result;
use arc_swap::{ArcSwap, ArcSwapOption};
use clash_verge_logger::AsyncLogger;
use once_cell::sync::Lazy;
use std::{fmt, sync::Arc, time::Instant};
use tauri_plugin_shell::process::CommandChild;
use crate::singleton;
pub(crate) static CLASH_LOGGER: Lazy<Arc<AsyncLogger>> = Lazy::new(|| Arc::new(AsyncLogger::new()));
#[derive(Debug, serde::Serialize, PartialEq, Eq)]
pub enum RunningMode {
Service,
+8 -2
View File
@@ -1,8 +1,8 @@
use super::{CoreManager, RunningMode};
use crate::{
AsyncHandler,
config::Config,
core::{handle, logger::CLASH_LOGGER, service},
config::{Config, IClashTemp},
core::{handle, manager::CLASH_LOGGER, service},
logging,
utils::{dirs, init::sidecar_writer},
};
@@ -39,6 +39,12 @@ impl CoreManager {
dirs::path_to_str(&config_dir)?,
"-f",
dirs::path_to_str(&config_file)?,
if cfg!(windows) {
"-ext-ctl-pipe"
} else {
"-ext-ctl-unix"
},
&IClashTemp::guard_external_controller_ipc(),
])
.spawn()?;