From: sheepman Date: 2007-03-11T12:09:59+09:00 Subject: [ruby-dev:30524] DL::Symbol#call dumps core こんにちは、 sheepman です。 dl(1.8に付属の方)のマニュアルを書いていて気がついたんですが、 次のようにすると core を吐きます。 strlast = DL.callback('IS'){|s| s[-1] } p strlast.call("abcd")[0].chr DL.remove_callback(strlast) p strlast.call("abcd")[0].chr $ ruby-1.8 -vrdl/import t.rb ruby 1.8.6 (2007-03-05 patchlevel 5000) [i686-linux] "d" t.rb:9: [BUG] Segmentation fault ruby 1.8.6 (2007-03-05) [i686-linux] zsh: abort ruby-1.8 -vrdl/import t.rb 以下はパッチです。 Index: mkcallback.rb =================================================================== --- mkcallback.rb (revision 12023) +++ mkcallback.rb (working copy) @@ -31,6 +31,9 @@ subst_code, "", " obj = rb_hash_aref(DLFuncTable, rb_assoc_new(INT2NUM(#{rettype.to_s}),INT2NUM(#{fnum.to_s})));", + " if(NIL_P(obj))", + " rb_raise(rb_eDLError, \"callback funciton does not exist in DL::FuncTable\");", + " Check_Type(obj, T_ARRAY);", " proto = rb_ary_entry(obj, 0);", " proc = rb_ary_entry(obj, 1);", " Check_Type(proto, T_STRING);", -- sheepman / TAMURA Takashi sheepman@sheepman.sakura.ne.jp