操作
バグ #478
完了バグ #474: コードベース健全性: メモリリーク・重大バグの一括調査と修正
音源/ファイル書き出しのハンドルリーク解消(FLAC/MP3/Course)
バグ #478:
音源/ファイル書き出しのハンドルリーク解消(FLAC/MP3/Course)
説明
現象¶
Closeable が try-with-resources 外または例外パスで close されず、OS ファイルハンドルがリークする。FLAC 主体の譜面集で「Too many open files」や Windows でのファイルロック残留に直結。
対象箇所¶
-
FLAC(確定・最優先)
src/bms/player/beatoraja/audio/PCM.java:289-
FLACDecoder input = new FLACDecoder(new BufferedInputStream(Files.newInputStream(p)));がメソッド内で一度も close されない。FLAC キー音を読むたびハンドルリーク。
-
-
MP3
src/bms/player/beatoraja/audio/PCM.java:256-
bitstream.close()が正常系末尾(:280)のみ。デコード中例外 →catch(Throwable){}(:284)握りつぶしでハンドルリーク。
-
-
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 相当)が頭打ちになる。
- コース保存時に書き込み例外が出てもファイルロックが残らない。
操作