后端:游玩计数锁中毒时留日志

- game_play_counter.rs:lock 仍从中毒互斥锁恢复,但先 warn 一次,便于关联留下部分更新状态的 panic
This commit is contained in:
2026-10-03 19:26:06 +08:00
parent 7c3398029e
commit ea8734b700
@@ -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()
})
}
}