バグ #556
完了
RubyGtk2のコードに少し手を入れたらGtk::TreeIterがガベージコレクトされるようになった。Stringとかがギザギザなのは TimeLimitedStorage でオブジェクトの参照が定期的に切り離されてGCが働くからだと思う。
ただこれで完全に解決かどうかは怪しい。今でも若干Gtk::TreeIterが時間経過と共に、ごくわずかにだが増えていってる。
もう少しちゃんと調査して、この変更をRubyGnome2プロジェクトに取り込んでもらうべきかどうか考えてみる。
先の、わずかにGtk::TreeIterがリークしている問題も原因が判明し、修正を加えて、home_timelineと依存する幾つかのプラグインだけで60時間以上稼働させてみたところ、最終のメモリ使用量は470MB程度になった。また、オブジェクトの数の遷移のグラフを見ても、ほぼ増えていないので解決したといってよさそう。
今回手を入れたコードを、 RubyGNOME2 プロジェクトに送ったところ、取り込んでもらえた。
https://github.com/ruby-gnome2/ruby-gnome2/pull/128
また、この変更は 1/30 にリリースされた Ruby GNOME2 1.2.1 に含まれている。これからもディストリのパッケージの関係などで古いRuby Gtkを使い続ける人が多いと思われるので、メモリリーク回避用のコードは削除せずに残しておき、起動時にバージョンを確認して、どちらの実装を使うか選択するようにする。
また、この不具合に対する対策は、 0.2.1 にも適用する。
他の形式にエクスポート: Atom
PDF