From: Masao M. <mu...@hi...> - 2003-07-30 14:31:10
|
むとうです。 On Wed, 30 Jul 2003 06:39:39 +0900 (JST) Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > さかいです。 > > 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というのはちょっと気持悪いなぁと感じています。 > そこで、このような場合に なるほど。 逆に、Rubyから見てWindowsだとかX11とかを意識する必要がないということで Gdk::GCと見えるのは解の一つとしてはアリかなと思います。 RubyとしてGdkより下の階層を見せる必要も無いかなぁと。 とはいえ、実際の実装クラスが何なのかというのがわかっても悪くはないと 思います。 > RBASIC(obj)->klass = GTYPE2CLASS(t1); > のようにして、Ruby側のクラスを差し替えてしまう事を考えたのですが、 > こういうのはアリでしょうか? えっと、これはGdk::GCのサブクラスとして、Gdk::GCX11, Gdk::GCWin32とか いうのを別途実装するということですよね。 実装クラスをプラッガブルなクラスと考えると自動生成するとか考えないと じゃないかなぁと思います。 > > 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関係だと思います。 > ひょっとしたらこのパッチで解決するかも。 解決しました。助かりました。 というわけで、あてといてくださいな。 それでは。 -- .:% Masao Mutoh<mu...@hi...> |