From: Nobuyoshi Nakada Date: 2006-09-08T08:45:33+09:00 Subject: [ruby-dev:29523] reentr to Init_extension (Re: C socket to Ruby socket) なかだです。 At Thu, 7 Sep 2006 12:54:01 +0900, Nobuyoshi Nakada wrote in [ruby-talk:213070]: > This is a script to generate autoloading code. これで気付いたんですが、次のようにすると大量の警告が出ます。 $ ruby -e 'm="socket";%w[BasicSocket Socket].each{|n|autoload(n, m)}' -e Socket 拡張ライブラリに対してもロード中かどうかのチェックは必要じゃな いでしょうか。 Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.944 diff -p -U 2 -r1.944 eval.c --- eval.c 4 Sep 2006 05:46:46 -0000 1.944 +++ eval.c 7 Sep 2006 23:41:08 -0000 @@ -7069,13 +7069,13 @@ rb_require_safe(VALUE fname, int safe) else { ruby_safe_level = 0; + /* loading ruby library should be serialized. */ + if (!loading_tbl) { + loading_tbl = st_init_strtable(); + } + /* partial state */ + ftptr = ruby_strdup(RSTRING_PTR(path)); + st_insert(loading_tbl, (st_data_t)ftptr, (st_data_t)curr_thread); switch (found) { case 'r': - /* loading ruby library should be serialized. */ - if (!loading_tbl) { - loading_tbl = st_init_strtable(); - } - /* partial state */ - ftptr = ruby_strdup(RSTRING_PTR(path)); - st_insert(loading_tbl, (st_data_t)ftptr, (st_data_t)curr_thread); rb_load(path, 0); break; -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦