fix: 修复容错 JSON 解析器的 Mutex 污染问题
- 替换 unwrap() 为适当的错误处理,避免 PoisonError 导致的 panic - 在 Mutex 被污染时返回友好的错误信息而不是崩溃 - 提高 VEO3 角色文件创建功能的稳定性
This commit is contained in:
parent
d86c1d23fb
commit
8785cc6097
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue