fix: 修复容错 JSON 解析器的 Mutex 污染问题

- 替换 unwrap() 为适当的错误处理,避免 PoisonError 导致的 panic
- 在 Mutex 被污染时返回友好的错误信息而不是崩溃
- 提高 VEO3 角色文件创建功能的稳定性
This commit is contained in:
imeepos 2025-08-15 18:54:23 +08:00
parent d86c1d23fb
commit 8785cc6097
1 changed files with 15 additions and 2 deletions

View File

@ -99,7 +99,9 @@ impl JsonParserState {
/// 获取或创建解析器实例
fn get_or_create_parser(&self, config: Option<ParserConfig>) -> 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) {