操作
バグ #474
完了コードベース健全性: メモリリーク・重大バグの一括調査と修正
バグ #474:
コードベース健全性: メモリリーク・重大バグの一括調査と修正
説明
概要¶
メモリリーク・メモリ削減・重大な違反/バグの観点でコードベース(src/bms/player/beatoraja 配下 547 ファイル)を調査した結果のトラッキングチケット。確度の高い指摘を実コードで裏取り済み。具体的な修正は子チケットに分割する。
重大度サマリ¶
A. クラッシュ系(実害大・確定) → 子チケット¶
- BarSorter の
(int)(long-long)キャストによる Comparator contract 違反(選曲ソートでIllegalArgumentException) - BarManager の
BarSorter.valueOf未検証(不正 config で選曲クラッシュ)+ デッドコード - JudgeManager のゼロ除算 / 配列外(不正な外部スキンでプレイ中クラッシュ)
B. ネイティブ Gfx リソースリーク(Texture/Pixmap) → 子チケット¶
- FFmpegProcessor の動画フレーム pixmap(最大の蓄積リーク)ほか 8 件
C. ファイルハンドルリーク(Closeable) → 子チケット¶
- PCM.java の FLAC/MP3 デコード、CourseDataAccessor の Writer
D. 並行処理レース・無制限キャッシュ → 子チケット¶
- AbstractAudioDriver 並列ロード、AbstractResult/MusicResult の非 volatile 共有、PortAudioDriver、BitmapFontCache
補足(誤検知)¶
当初疑われた DB Connection リークは commons-dbutils QueryRunner の auto-close により発生せず、誤検知と確認。BarSorter の int 同士減算(BPM/LENGTH 等)は非負・小値域のため実害低(予防的改善)。
操作