Skip to content

Commit bdb5cf3

Browse files
authored
Merge pull request #6140 from menloresearch/fix/factory-reset-got-blocked
fix: factory reset process got blocked
2 parents 97c5039 + 59dec7c commit bdb5cf3

File tree

4 files changed

+27
-27
lines changed

4 files changed

+27
-27
lines changed

src-tauri/src/core/cmd.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
22
use std::{fs, io, path::PathBuf};
33
use tauri::{AppHandle, Manager, Runtime, State};
44

5-
use crate::core::utils::extensions::inference_llamacpp_extension::cleanup::cleanup_processes;
5+
use crate::core::{mcp::clean_up_mcp_servers, utils::extensions::inference_llamacpp_extension::cleanup::cleanup_processes};
66

77
use super::{server, setup, state::AppState};
88

@@ -125,6 +125,7 @@ pub fn factory_reset(app_handle: tauri::AppHandle, state: State<'_, AppState>) {
125125
log::info!("Factory reset, removing data folder: {:?}", data_folder);
126126

127127
tauri::async_runtime::block_on(async {
128+
clean_up_mcp_servers(state.clone()).await;
128129
cleanup_processes(state).await;
129130

130131
if data_folder.exists() {
@@ -138,7 +139,7 @@ pub fn factory_reset(app_handle: tauri::AppHandle, state: State<'_, AppState>) {
138139
let _ = fs::create_dir_all(&data_folder).map_err(|e| e.to_string());
139140

140141
// Reset the configuration
141-
let mut default_config = AppConfiguration::default();
142+
let mut default_config: AppConfiguration = AppConfiguration::default();
142143
default_config.data_folder = default_data_folder_path(app_handle.clone());
143144
let _ = update_app_configuration(app_handle.clone(), default_config);
144145

src-tauri/src/core/mcp.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,26 @@ pub async fn reset_mcp_restart_count(state: State<'_, AppState>, server_name: St
751751
Ok(())
752752
}
753753

754+
pub async fn clean_up_mcp_servers(
755+
state: State<'_, AppState>,
756+
) {
757+
log::info!("Cleaning up MCP servers");
758+
759+
// Stop all running MCP servers
760+
let _ = stop_mcp_servers(state.mcp_servers.clone()).await;
761+
762+
// Clear active servers and restart counts
763+
{
764+
let mut active_servers = state.mcp_active_servers.lock().await;
765+
active_servers.clear();
766+
}
767+
{
768+
let mut restart_counts = state.mcp_restart_counts.lock().await;
769+
restart_counts.clear();
770+
}
771+
log::info!("MCP servers cleaned up successfully");
772+
}
773+
754774
pub async fn stop_mcp_servers(
755775
servers_state: Arc<Mutex<HashMap<String, RunningService<RoleClient, ()>>>>,
756776
) -> Result<(), String> {

src-tauri/src/core/setup.rs

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -199,30 +199,6 @@ pub fn setup_mcp(app: &App) {
199199
let state = app.state::<AppState>();
200200
let servers = state.mcp_servers.clone();
201201
let app_handle: tauri::AppHandle = app.handle().clone();
202-
// Setup kill-mcp-servers event listener (similar to kill-sidecar)
203-
let app_handle_for_kill = app_handle.clone();
204-
app_handle.listen("kill-mcp-servers", move |_event| {
205-
let app_handle = app_handle_for_kill.clone();
206-
tauri::async_runtime::spawn(async move {
207-
log::info!("Received kill-mcp-servers event - cleaning up MCP servers");
208-
let app_state = app_handle.state::<AppState>();
209-
// Stop all running MCP servers
210-
if let Err(e) = super::mcp::stop_mcp_servers(app_state.mcp_servers.clone()).await {
211-
log::error!("Failed to stop MCP servers: {}", e);
212-
return;
213-
}
214-
// Clear active servers and restart counts
215-
{
216-
let mut active_servers = app_state.mcp_active_servers.lock().await;
217-
active_servers.clear();
218-
}
219-
{
220-
let mut restart_counts = app_state.mcp_restart_counts.lock().await;
221-
restart_counts.clear();
222-
}
223-
log::info!("MCP servers cleaned up successfully");
224-
});
225-
});
226202
tauri::async_runtime::spawn(async move {
227203
if let Err(e) = run_mcp_commands(&app_handle, servers).await {
228204
log::error!("Failed to run mcp commands: {}", e);

src-tauri/src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ use std::{collections::HashMap, sync::Arc};
1010
use tauri::{Emitter, Manager, RunEvent};
1111
use tokio::sync::Mutex;
1212

13+
use crate::core::mcp::clean_up_mcp_servers;
14+
1315
#[cfg_attr(mobile, tauri::mobile_entry_point)]
1416
pub fn run() {
1517
let mut builder = tauri::Builder::default();
@@ -143,10 +145,10 @@ pub fn run() {
143145
.on_window_event(|window, event| match event {
144146
tauri::WindowEvent::CloseRequested { .. } => {
145147
if window.label() == "main" {
146-
window.emit("kill-mcp-servers", ()).unwrap();
147148
let state = window.app_handle().state::<AppState>();
148149

149150
tauri::async_runtime::block_on(async {
151+
clean_up_mcp_servers(state.clone()).await;
150152
cleanup_processes(state).await;
151153
});
152154
}
@@ -173,6 +175,7 @@ pub fn run() {
173175
}
174176

175177
// Quick cleanup with shorter timeout
178+
clean_up_mcp_servers(state.clone()).await;
176179
cleanup_processes(state).await;
177180
});
178181
});

0 commit comments

Comments
 (0)