よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

November 01, 2005 [おもひで]

[Ruby-GNOME2] 大バグ・・・アゲイン(T_T)

全面的にメモリリークしてることが判明....(T_T)。

ものすごくお恥ずかしいバグだ。0.14.1を出す必要がありそう。

自分への戒めのために今回のバグについてメモしておく。

このバグは0.14.0で作り込んでしまったバグで、元々は前回のこの問題に対処しようとしたもの。

前回の考察で、全てのメソッド毎にこういった改修をやるのはものすごく大変なので代替案が無いかなぁ、と思って探していたところ、これだっ!とひらめいたのが0.14.0での実装....なんだけどこれがダメだったわけよ。なんで気づかないかなー、オレ。

で、具体的には、

「GLib::Objectが生成された際に、とにかくRubyのグローバルなHash変数にその値を保持する。g_object_unrefが呼ばれてリファレンスカウンタが0になったタイミングでRubyのHash変数からもオブジェクトを削除するようにする。」

という実装。

当時は、Gtk::Object#destroyやg_object_unrefなんかが呼ばれるタイミングで削除できるから問題ない、と思ってしまっていたし、なんとなくテストしている範囲では大丈夫だった(ような気がした)ので問題ないと思ってたんだけど、実はg_object_unrefが呼び出されるタイミングって、RubyオブジェクトがGCされるタイミングなわけで、それってグローバルなHash変数に保持する以上、GCされないんだよね。うぬぬ。なぜ気づかなかったんだ....。

やはり、前回のこの問題をきちんと考えないといけないんだろうなぁ。

[Ruby-GNOME2] G_RELATIVE2

前回の考察でG_RELATIVE2を使う、と書いてある。ちょっと実装見直してみたけど、このまま使うのは正直しんどいなぁ。

名前も含めて考え直さないとだね...。


編集