diff --git a/apps/desktop/src-tauri/src/presentation/commands/tolerant_json_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/tolerant_json_commands.rs index f4ffe36..95cb9fd 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/tolerant_json_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/tolerant_json_commands.rs @@ -99,7 +99,9 @@ impl JsonParserState { /// 获取或创建解析器实例 fn get_or_create_parser(&self, config: Option) -> Result<()> { - let mut parser_guard = self.parser.lock().unwrap(); + let mut parser_guard = self.parser.lock().map_err(|_| { + anyhow::anyhow!("Failed to acquire parser lock") + })?; // 每次都创建新的解析器实例以确保使用正确的配置 let parser = TolerantJsonParser::new(config)?; @@ -132,7 +134,18 @@ pub async fn parse_json_tolerant( } // 执行解析 - let mut parser_guard = state.parser.lock().unwrap(); + let mut parser_guard = match state.parser.lock() { + Ok(guard) => guard, + Err(_) => { + error!("Failed to acquire parser lock, mutex is poisoned"); + return Ok(ParseJsonResponse { + success: false, + data: None, + statistics: None, + error: Some("Parser lock is poisoned, please restart the application".to_string()), + }); + } + }; if let Some(ref mut parser) = *parser_guard { info!("Starting JSON parsing for text: {}", &request.text[..std::cmp::min(100, request.text.len())]); match parser.parse(&request.text) {