后端:游玩计数锁中毒时留日志
- game_play_counter.rs:lock 仍从中毒互斥锁恢复,但先 warn 一次,便于关联留下部分更新状态的 panic
This commit is contained in:
@@ -12,6 +12,8 @@ use std::{
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
|
||||
use tracing::warn;
|
||||
|
||||
/// 默认 flush 间隔;与 `tracking_outbox` 的秒级节奏一致,够短以保证展示及时。
|
||||
const DEFAULT_FLUSH_INTERVAL: Duration = Duration::from_secs(5);
|
||||
/// 同一 `identity + game_id` 的去重窗口。
|
||||
@@ -206,9 +208,11 @@ impl GamePlayCounter {
|
||||
|
||||
fn lock(&self) -> MutexGuard<'_, GamePlayCounterState> {
|
||||
// 计数是尽力而为的展示指标:锁中毒时继续用内部状态,不让一次 panic 永久关闭计数。
|
||||
self.inner
|
||||
.lock()
|
||||
.unwrap_or_else(|poisoned| poisoned.into_inner())
|
||||
// 但中毒意味着上一次 panic 可能留下部分更新的状态,必须留下可关联的日志。
|
||||
self.inner.lock().unwrap_or_else(|poisoned| {
|
||||
warn!("游戏游玩计数锁已中毒,继续使用内部状态");
|
||||
poisoned.into_inner()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user