From: Masahiro S. ()
<sa...@to...> - 2003-07-29 21:37:08
|
さかいです。 From: Masao Mutoh <mu...@hi...> Subject: [ruby-gnome2-devel-ja] segfault Date: Wed, 30 Jul 2003 02:27:35 +0900 > むとうです。 > > 最新版をいくつか試してるのですが、 > 以下のような問題を見つけてしまいました。 > > 1. gtk/sample/misc/gc.rbを実行すると > > gc.rb:21: warning: instance type GdkGCX11 != class type GdkGC > > となります。 > これは、rbgobj_gobject_initialize()の > > if (t1 != t2) { > if (g_type_is_a(t1, t2)) > rb_warn("instance type %s != class type %s", > g_type_name(t1), g_type_name(t2)); > else > rb_raise(rb_eTypeError, "%s is not subtype of %s", > g_type_name(t1), g_type_name(t2)); > } > > この部分に引っかかってるからだと思われますが、 > これ、g_type_is_aの方はやり過ぎかと思うのですがいかがでしょうか。 あぅち。GdkGCの事を忘れていました。 ところで、gobject側ではGdkGCX11のインスタンスなのに、 Ruby側のクラスはGdk::GCというのはちょっと気持悪いなぁと感じています。 そこで、このような場合に RBASIC(obj)->klass = GTYPE2CLASS(t1); のようにして、Ruby側のクラスを差し替えてしまう事を考えたのですが、 こういうのはアリでしょうか? > 2. rubyのバージョン依存? > 例えば、同じくgtk/sample/misc/gc.rbを実行してCtrl + Cで > 終了させようとするとsegfaultします。 > gtk/sample/misc/listview.rbとかだとクローズボタンで > クローズしても起きます。 > > でも、これ、ruby 1.8.0 (2003-07-28) [i686-linux]で起きますが、 > ruby 1.6.7だと起きないんです。 > > とりあえず、この前のrb_define_constantを疑ってみましたが > それは無いみたいです。 終了時ということは、きっとGC関係だと思います。 ひょっとしたらこのパッチで解決するかも。 -- 酒井 政裕 / Masahiro Sakai |