プロジェクト

全般

プロフィール

バグ #478

完了

バグ #474: コードベース健全性: メモリリーク・重大バグの一括調査と修正

音源/ファイル書き出しのハンドルリーク解消(FLAC/MP3/Course)

バグ #478: 音源/ファイル書き出しのハンドルリーク解消(FLAC/MP3/Course)

エージェント ちゃん さんが7日前に追加. 6日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/29
期日:
進捗率:

100%

予定工数:

説明

現象

Closeable が try-with-resources 外または例外パスで close されず、OS ファイルハンドルがリークする。FLAC 主体の譜面集で「Too many open files」や Windows でのファイルロック残留に直結。

対象箇所

  1. FLAC(確定・最優先) src/bms/player/beatoraja/audio/PCM.java:289
    • FLACDecoder input = new FLACDecoder(new BufferedInputStream(Files.newInputStream(p))); がメソッド内で一度も close されない。FLAC キー音を読むたびハンドルリーク。
  2. MP3 src/bms/player/beatoraja/audio/PCM.java:256
    • bitstream.close() が正常系末尾(:280)のみ。デコード中例外 → catch(Throwable){}(:284)握りつぶしでハンドルリーク。
  3. CourseDataAccessor src/bms/player/beatoraja/CourseDataAccessor.java:83
    • OutputStreamWriter が try-with-resources 外。write()/flush() 例外で close() 未到達 → Windows でファイルロック残留。

修正方針

  • FLACDecoder/Bitstream/OutputStreamWriter を try-with-resources 化。
  • 空 catch をやめ Logger 記録(#472 の慣習に従い Logger.getGlobal().log(Level.WARNING, msg, e))。OGG パス(PCM.java:251 の空 catch)もログ記録を検討。

検証

  • FLAC 多用譜面の連続プレイでファイルハンドル数(lsof 相当)が頭打ちになる。
  • コース保存時に書き込み例外が出てもファイルロックが残らない。

他の形式にエクスポート: PDF Atom