From: Masao M. <mu...@hi...> - 2003-07-29 17:27:42
|
むとうです。 最新版をいくつか試してるのですが、 以下のような問題を見つけてしまいました。 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の方はやり過ぎかと思うのですがいかがでしょうか。 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を疑ってみましたが それは無いみたいです。 ちと、これからデバッグしてみますが、今週は忙しいので あまり見れないかも.....。 ひとまず、どなたか追試していただけると助かります。 #今週末リリースは厳しいかなぁ(^^;)。 -- .:% Masao Mutoh<mu...@hi...> |
From: Masahiro S. ()
<sa...@to...> - 2003-07-29 21:37:08
Attachments:
glib-type.diff
|
さかいです。 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 |
From: Masao M. <mu...@hi...> - 2003-07-30 17:46:58
|
むとうです。 On Wed, 30 Jul 2003 23:31:04 +0900 Masao Mutoh <mu...@hi...> wrote: > > > 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関係だと思います。 > > ひょっとしたらこのパッチで解決するかも。 > > 解決しました。助かりました。 > > というわけで、あてといてくださいな。 と思ったのですが、(実際rbbrの件は大丈夫になったのですが) シグナルの中で存在しないメソッド呼び出しを行うと落ちるようです。 #ご報告だけですみません。 require 'gtk2' Gtk.init w = Gtk::Window.new button = Gtk::Button.new("hoge") button.signal_connect("clicked") do hoge #ここ end w.add(button).show_all Gtk.main -- .:% Masao Mutoh<mu...@hi...> |
From: Masahiro S. ()
<sa...@to...> - 2003-07-31 17:37:48
|
さかいです。 From: Masao Mutoh <mu...@hi...> Subject: Re: [ruby-gnome2-devel-ja] segfault Date: Thu, 31 Jul 2003 02:46:51 +0900 > むとうです。 > > On Wed, 30 Jul 2003 23:31:04 +0900 > Masao Mutoh <mu...@hi...> wrote: > > > > 終了時ということは、きっとGC関係だと思います。 > > > ひょっとしたらこのパッチで解決するかも。 > > > > 解決しました。助かりました。 > > > > というわけで、あてといてくださいな。 あてときました。 > と思ったのですが、(実際rbbrの件は大丈夫になったのですが) > シグナルの中で存在しないメソッド呼び出しを行うと落ちるようです。 > #ご報告だけですみません。 > > require 'gtk2' > > Gtk.init > > w = Gtk::Window.new > button = Gtk::Button.new("hoge") > > button.signal_connect("clicked") do > hoge #ここ > end > > w.add(button).show_all > > Gtk.main これは私の所では再現しませんでした。 ちょっと原因は思い付きません。 -- 酒井 政裕 / Masahiro Sakai |
From: Masao M. <mu...@hi...> - 2003-08-02 17:46:29
|
むとうです。 中間報告です。 On Fri, 1 Aug 2003 22:46:12 +0900 Masao Mutoh <mu...@hi...> wrote: > 上記では落ちなくなったのですが、最新のrbbrだと落ちます....。 > 特定のメソッドが原因のような気もしてますのでちと追ってみます。 > > それでは。 たぶん、以下のスクリプトで再現すると思います。 HashをStringに変えると起きません。 gdbのbtの状況とHashが引っかかったところを見ると、 boxed_ruby_*周りが怪しいかなと思っています。 #もうちょっと追ってみます。 それでは。 --- require 'gtk2' Gtk.init class Test < Gtk::TreeView def initialize model = Gtk::ListStore.new(String, Hash) # model = Gtk::ListStore.new(String, String) super(model) renderer = Gtk::CellRendererText.new column = Gtk::TreeViewColumn.new("test", renderer, {:text => 0}) append_column(column) iter = model.append iter.set_value(0, "hoge1") iter.set_value(1, {"hoge" => 1, "fuga" =>2}) # iter.set_value(1, "fuga") end end tv = Test.new win = Gtk::Window.new.add(tv).show_all win.signal_connect("destroy") do Gtk.main_quit end Gtk.main ----- backtraceの結果 Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 1074295968 (LWP 11359)] 0x0805900f in rb_longjmp (tag=6, mesg=1084405584) at eval.c:3923 3923 JUMP_TAG(tag); (gdb) bt #0 0x0805900f in rb_longjmp (tag=6, mesg=1084405584) at eval.c:3923 #1 0x08059084 in rb_exc_raise (mesg=1084405584) at eval.c:3930 #2 0x080ba5f7 in rb_raise (exc=1074484448, fmt=0x80d54a0 "wrong argument type %s (expected %s)") at error.c:694 #3 0x080b983a in rb_check_type (x=0, t=-1073756272) at error.c:254 #4 0x4002720d in boxed_ruby_value_unref (val=0) at rbgobj_valuetypes.c:170 #5 0x400de2d0 in g_boxed_free (boxed_type=135957332, boxed=0x40a2ba0c) at gboxed.c:409 #6 0x40685fb4 in _gtk_tree_data_list_free () from /usr/lib/libgtk-x11-2.0.so.0 #7 0x40135148 in g_slist_foreach (list=0x0, func=0x40685ef0 <_gtk_tree_data_list_free>, user_data=0x8116188) at gslist.c:630 #8 0x405d3d76 in gtk_list_store_set_column_types () from /usr/lib/libgtk-x11-2.0.so.0 #9 0x400e1409 in g_object_last_unref (object=0x401058e8) at gobject.c:442 #10 0x40022462 in rbgobj_free (holder=0x81b8728) at rbgobject.c:134 #11 0x0806b0d3 in rb_gc_call_finalizer_at_exit () at gc.c:1607 #12 0x080534c1 in ruby_finalize_0 (exp=0xbfffed30) at eval.c:1333 #13 0x08053622 in ruby_cleanup (ex=0) at eval.c:1368 #14 0x08053726 in ruby_stop (ex=0) at eval.c:1395 #15 0x08053765 in ruby_run () at eval.c:1407 #16 0x08051bb9 in main (argc=2, argv=0xbfffedd4, envp=0xbfffede0) at main.c:50 #17 0x42015574 in __libc_start_main () from /lib/tls/libc.so.6 (gdb) -- .:% Masao Mutoh<mu...@hi...> |
From: Masao M. <mu...@hi...> - 2003-08-01 13:46:18
|
むとうです。 On Fri, 01 Aug 2003 02:26:11 +0900 (JST) Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > さかいです。 > > From: Masao Mutoh <mu...@hi...> > Subject: Re: [ruby-gnome2-devel-ja] segfault > Date: Thu, 31 Jul 2003 02:46:51 +0900 > > > むとうです。 > > > > On Wed, 30 Jul 2003 23:31:04 +0900 > > Masao Mutoh <mu...@hi...> wrote: > > > > > > 終了時ということは、きっとGC関係だと思います。 > > > > ひょっとしたらこのパッチで解決するかも。 > > > > > > 解決しました。助かりました。 > > > > > > というわけで、あてといてくださいな。 > > あてときました。 どうもです。 > > と思ったのですが、(実際rbbrの件は大丈夫になったのですが) > > シグナルの中で存在しないメソッド呼び出しを行うと落ちるようです。 > > #ご報告だけですみません。 > > > > require 'gtk2' > > > > Gtk.init > > > > w = Gtk::Window.new > > button = Gtk::Button.new("hoge") > > > > button.signal_connect("clicked") do > > hoge #ここ > > end > > > > w.add(button).show_all > > > > Gtk.main > > これは私の所では再現しませんでした。 > ちょっと原因は思い付きません。 上記では落ちなくなったのですが、最新のrbbrだと落ちます....。 特定のメソッドが原因のような気もしてますのでちと追ってみます。 それでは。 -- .:% Masao Mutoh<mu...@hi...> |
From: Masao M. <mu...@hi...> - 2003-08-04 17:25:09
|
さかいさん むとうです。 質問&中間報告です。 さらに短い再現スクリプトができました。 require 'gtk2' Gtk.init model = Gtk::ListStore.new(Array) iter = model.append iter.set_value(0, Array.new) GC.start とりあえず、現時点でわかったこととして、 上記コードで、boxed_ruby_value_ref()が2回呼ばれます。 これは1回だけ呼ばれるべきかと思うのですが、 2回呼ばれるのには理由があるのでしょうか。 ここで2回呼ばれるのでref counterが2になります。 逆にboxed_ruby_value_unref()は1回呼ばれるのですが、 カウンタは1なのでmarkers.deleteが呼び出されず、 (もう一度呼ぼうとする?)その直後にsegfaultします。 何かわかることがありましたら教えてください。 #今日はここまでです...。 -- .:% Masao Mutoh<mu...@hi...> |
From: Masahiro S. ()
<sa...@to...> - 2003-08-04 17:51:11
|
さかいです。 From: Masao Mutoh <mu...@hi...> Subject: Re: [ruby-gnome2-devel-ja] segfault Date: Sun, 3 Aug 2003 02:46:22 +0900 > むとうです。 > > 中間報告です。 > > On Fri, 1 Aug 2003 22:46:12 +0900 > Masao Mutoh <mu...@hi...> wrote: > > > 上記では落ちなくなったのですが、最新のrbbrだと落ちます....。 > > 特定のメソッドが原因のような気もしてますのでちと追ってみます。 > > > > それでは。 > > たぶん、以下のスクリプトで再現すると思います。 > > HashをStringに変えると起きません。 > > gdbのbtの状況とHashが引っかかったところを見ると、 > boxed_ruby_*周りが怪しいかなと思っています。 うーん。 手元の環境だと何故か再現しないんです。なんでだろ… * ruby 1.8.0 (2003-08-02) [i386-cygwin] * glib-2.2.2 gtk+-2.2.2 Linuxマシンにも久しぶりにgtk2入れようかなぁ。 > backtraceの結果 > > Program received signal SIGSEGV, Segmentation fault. > [Switching to Thread 1074295968 (LWP 11359)] > 0x0805900f in rb_longjmp (tag=6, mesg=1084405584) at eval.c:3923 > 3923 JUMP_TAG(tag); > (gdb) bt > #0 0x0805900f in rb_longjmp (tag=6, mesg=1084405584) at eval.c:3923 > #1 0x08059084 in rb_exc_raise (mesg=1084405584) at eval.c:3930 > #2 0x080ba5f7 in rb_raise (exc=1074484448, > fmt=0x80d54a0 "wrong argument type %s (expected %s)") at error.c:694 > #3 0x080b983a in rb_check_type (x=0, t=-1073756272) at error.c:254 > #4 0x4002720d in boxed_ruby_value_unref (val=0) at rbgobj_valuetypes.c:170 むむ? valが0=QfalseということはSPECIAL_CONST_P(val)が真になって、 170行目のData_Get_Structに到達しないはずなのに…… しかもrb_check_typeの第二引数がT_DATA=0x22でないのも何か変です。 162: static void 163: boxed_ruby_value_unref(VALUE val) 164: { 165: if (!SPECIAL_CONST_P(val)){ 166: VALUE key = rb_obj_id(val); 167: VALUE marker = rb_hash_aref(boxed_ruby_value_markers, key); 168: boxed_ruby_value_counter* counter; 169: 170: Data_Get_Struct(marker, boxed_ruby_value_counter, counter); 171: counter->ref_count -= 1; 172: 173: if (!counter->ref_count) 174: rb_funcall(boxed_ruby_value_markers, id_delete, 1, key); 175: } 176: } > #5 0x400de2d0 in g_boxed_free (boxed_type=135957332, boxed=0x40a2ba0c) > at gboxed.c:409 > #6 0x40685fb4 in _gtk_tree_data_list_free () from /usr/lib/libgtk-x11-2.0.so.0 > #7 0x40135148 in g_slist_foreach (list=0x0, > func=0x40685ef0 <_gtk_tree_data_list_free>, user_data=0x8116188) > at gslist.c:630 > #8 0x405d3d76 in gtk_list_store_set_column_types () > from /usr/lib/libgtk-x11-2.0.so.0 > #9 0x400e1409 in g_object_last_unref (object=0x401058e8) at gobject.c:442 > #10 0x40022462 in rbgobj_free (holder=0x81b8728) at rbgobject.c:134 > #11 0x0806b0d3 in rb_gc_call_finalizer_at_exit () at gc.c:1607 > #12 0x080534c1 in ruby_finalize_0 (exp=0xbfffed30) at eval.c:1333 > #13 0x08053622 in ruby_cleanup (ex=0) at eval.c:1368 多分、終了時のGCではrb_global_variableした変数といえど保護されないため、 boxed_ruby_value_markersが既に破棄されてしまっているのが原因でしょう。 RubyのHashではなくst.hかGHashTableを使うように変更しようと思います。 -- 酒井 政裕 / Masahiro Sakai |
From: Masao M. <mu...@hi...> - 2003-08-05 16:40:44
|
むとうです。 On Wed, 06 Aug 2003 01:09:34 +0900 (JST) Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > さかいです。 > > From: Masahiro Sakai (酒井政裕) <sa...@to...> > Subject: Re: [ruby-gnome2-devel-ja] segfault > Date: Tue, 05 Aug 2003 02:52:22 +0900 (JST) > > > 多分、終了時のGCではrb_global_variableした変数といえど保護されないため、 > > boxed_ruby_value_markersが既に破棄されてしまっているのが原因でしょう。 > > > > RubyのHashではなくst.hかGHashTableを使うように変更しようと思います。 > > というわけでパッチを作りました。 > これで解決するかもしれません。 どんぴしゃです。直りました。 コミットよろしくです。 P.S. はー、もはや、Ruby/GLibは私の手の届くトコロにないなぁ(^^;)。 -- .:% Masao Mutoh<mu...@hi...> |
From: Masahiro S. ()
<sa...@to...> - 2003-08-06 16:10:57
|
さかいです。 From: Masao Mutoh <mu...@hi...> Subject: Re: [ruby-gnome2-devel-ja] segfault Date: Wed, 6 Aug 2003 01:39:42 +0900 > むとうです。 > > > 多分、終了時のGCではrb_global_variableした変数といえど保護されないため、 > > > boxed_ruby_value_markersが既に破棄されてしまっているのが原因でしょう。 > > > > > > RubyのHashではなくst.hかGHashTableを使うように変更しようと思います。 > > > > というわけでパッチを作りました。 > > これで解決するかもしれません。 > > どんぴしゃです。直りました。 > > コミットよろしくです。 コミットしときました。 GRClosureの方にも同様の問題があるはずなので、こっちも変更しておきました。 > P.S. > はー、もはや、Ruby/GLibは私の手の届くトコロにないなぁ(^^;)。 メモリ管理はglib側とRuby側の両方を同時に考えなくちゃいけないので 特にややこしいですよね。私も結構混乱したりします (^^;) -- 酒井 政裕 / Masahiro Sakai |
From: Masao M. <mu...@hi...> - 2003-08-06 16:47:59
|
むとうです。 On Thu, 07 Aug 2003 01:12:33 +0900 (JST) Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > さかいです。 > > > > というわけでパッチを作りました。 > > > これで解決するかもしれません。 > > > > どんぴしゃです。直りました。 > > > > コミットよろしくです。 > > コミットしときました。 > GRClosureの方にも同様の問題があるはずなので、こっちも変更しておきました。 ありがとうございます。 > > P.S. > > はー、もはや、Ruby/GLibは私の手の届くトコロにないなぁ(^^;)。 > > メモリ管理はglib側とRuby側の両方を同時に考えなくちゃいけないので > 特にややこしいですよね。私も結構混乱したりします (^^;) いやぁ、それにしても、その辺をRuby/GLibに閉じこめたのは正解でしたね。 そのおかげで、周りのライブラリがだいぶ楽になってます。 それでは。 -- .:% Masao Mutoh<mu...@hi...> |
From: Masahiro S. ()
<sa...@to...> - 2003-08-05 16:03:41
|
さかいです。 From: Masao Mutoh <mu...@hi...> Subject: Re: [ruby-gnome2-devel-ja] segfault Date: Tue, 5 Aug 2003 02:25:02 +0900 > むとうです。 > > 質問&中間報告です。 > > さらに短い再現スクリプトができました。 > > require 'gtk2' > > Gtk.init > > model = Gtk::ListStore.new(Array) > iter = model.append > iter.set_value(0, Array.new) > > GC.start > > とりあえず、現時点でわかったこととして、 > > 上記コードで、boxed_ruby_value_ref()が2回呼ばれます。 > > これは1回だけ呼ばれるべきかと思うのですが、 > 2回呼ばれるのには理由があるのでしょうか。 > > ここで2回呼ばれるのでref counterが2になります。 > 逆にboxed_ruby_value_unref()は1回呼ばれるのですが、 > カウンタは1なのでmarkers.deleteが呼び出されず、 > (もう一度呼ぼうとする?)その直後にsegfaultします。 refの回数は多分2回で正しいはずです。 この場合、 (1) set_value内で (1.1) 一時的なGValueにまずセット。ここで1回目のref (1.2) gtk_list_store_set_value()の呼び出し。 内部でg_value_dup_boxed()が呼び出されて、2回目のref (1.3) 一時的なGValueのunset。ここで1回目のunref (2) Rubyの終了時にmodelがGCされて、持っているデータが解放される。 ここで2回目のunref という流れになっているはずなので。 P.S. 今週は丸の内で「ITスキル標準人材育成研修」とかいうのを受けているのですが、 それにしても東京は蒸し暑いですね。 歩いているだけで汗だくです。(^^; -- 酒井 政裕 / Masahiro Sakai |
From: Masao M. <mu...@hi...> - 2003-08-05 16:43:50
|
むとうです。 On Wed, 06 Aug 2003 01:05:14 +0900 (JST) Masahiro Sakai (酒井政裕) <sa...@to...> wrote: > さかいです。 > refの回数は多分2回で正しいはずです。 > > この場合、 > > (1) set_value内で > (1.1) 一時的なGValueにまずセット。ここで1回目のref > (1.2) gtk_list_store_set_value()の呼び出し。 > 内部でg_value_dup_boxed()が呼び出されて、2回目のref > (1.3) 一時的なGValueのunset。ここで1回目のunref > (2) Rubyの終了時にmodelがGCされて、持っているデータが解放される。 > ここで2回目のunref > > という流れになっているはずなので。 なるほど。 > P.S. > 今週は丸の内で「ITスキル標準人材育成研修」とかいうのを受けているのですが、 > それにしても東京は蒸し暑いですね。 > 歩いているだけで汗だくです。(^^; 丸の内ですか。私は最近は六本木周辺にいるので近かったですねぇ。 事前に言ってくださればラーメンくらいおごったのに(^^;)。 それにしても今日は暑かったですよね。夏って感じで、ちょっと外に出ると スーツの中は汗だくです(^^;)。 でも、「ITスキル標準人材育成研修」なんてさかいさんが受けるほどの ものでもないような気もしないでもないですが(^^;)。 それでは。 -- .:% Masao Mutoh<mu...@hi...> |
From: Masahiro S. ()
<sa...@to...> - 2003-08-05 16:10:11
Attachments:
glib-value-types.diff
|
さかいです。 From: Masahiro Sakai (酒井政裕) <sa...@to...> Subject: Re: [ruby-gnome2-devel-ja] segfault Date: Tue, 05 Aug 2003 02:52:22 +0900 (JST) > 多分、終了時のGCではrb_global_variableした変数といえど保護されないため、 > boxed_ruby_value_markersが既に破棄されてしまっているのが原因でしょう。 > > RubyのHashではなくst.hかGHashTableを使うように変更しようと思います。 というわけでパッチを作りました。 これで解決するかもしれません。 -- 酒井 政裕 / Masahiro Sakai |
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...> |