操作
バグ #459
完了選曲したらゲームがフリーズした
バグ #459:
選曲したらゲームがフリーズした
説明
st2 Armageddon -Eclipse- を選曲したらフリーズした
ファイル
操作
説明
st2 Armageddon -Eclipse- を選曲したらフリーズした
ファイル
| beatoraja.log (811 KB) beatoraja.log | いづ さん, 2026/06/28 20:23 |
実装に着手しました。
feature/459
AbstractAudioDriver.setModel)が完了せず停止する症状。間欠・再現不可で単一ログからは根本原因を断定できないため、(1) ロード遅延時に全スレッドダンプ+状態をログ出力する監視ウォッチドッグを追加して次回必ず原因を捕捉できるようにしつつ、(2) wav 読み込みを共有 ForkJoinPool から専用バウンデッドプールへ移し、全体タイムアウト+中断を入れて、1件のデコードハングがアプリ全体を巻き込まないよう堅牢化する。対応が完了しました。
選曲後にロード画面で無期限フリーズする不具合への対応。原因は AbstractAudioDriver.setModel が wav 読み込みを共有 ForkJoinPool.commonPool 上の parallelStream で実行しており、1件のデコードが詰まると全体が無期限ハングする(タイムアウト・中断・診断手段なし)点。間欠・再現不可で単一ログでは根本原因を断定できないため、診断強化とハードニングの両面で対応した。
ThreadDumpFormatter(全スレッドのスタック整形出力)と MediaLoadWatchdog(ロードが閾値超で継続中ならスレッドダンプ+状態を定期ログ出力、既定しきい値15s/間隔10s/最大5回・システムプロパティで調整可)を追加し、BMSResource に配線。次回フリーズ時に原因を確実に捕捉できるようにした。BoundedParallelExecutor で wav 読み込みを専用デーモンプール+全体タイムアウト+中断対応に変更。setModel はバッファのローカル参照確保で遅延書き込み汚染を防止、タイムアウト時はログを残しロード終了で無期限ハングを回避、abort() で実行中ロードを中断。正常中断は fine・真のタイムアウトのみ SEVERE。Config/AudioConfig スキーマ変更なし(設定移行不要)。audio/AbstractAudioDriver.java, BMSResource.java, runtime/ThreadDumpFormatter.java, runtime/MediaLoadWatchdog.java, runtime/BoundedParallelExecutor.java +テスト4件 の計9件。.\gradlew.bat test : 成功(BUILD SUCCESSFUL)。新規9テスト全合格(failures=0 errors=0)。media load still in progress: ... 以降のログを共有いただければ原因特定が可能。