diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-10-19 14:59:52 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-10-19 14:59:52 +0000 |
commit | db00c782f4d477e04217b8da9782d9fe3c515675 (patch) | |
tree | 63d180cb2229370671fa69e1f04bf75840c3f103 | |
parent | d43b40dbddde5d5bdb9efbf63978507d4f08d762 (diff) | |
download | ruby-db00c782f4d477e04217b8da9782d9fe3c515675.tar.gz |
* eval.c (rb_require_safe): provide the feature after loaded.
[ruby-list:40085]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | eval.c | 14 |
2 files changed, 13 insertions, 8 deletions
@@ -1,3 +1,8 @@ +Tue Oct 19 23:59:46 2004 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * eval.c (rb_require_safe): provide the feature after loaded. + [ruby-list:40085] + Tue Oct 19 22:43:12 2004 Dave Thomas <dave@pragprog.com> * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_attr): If @@ -6,7 +11,7 @@ Tue Oct 19 22:43:12 2004 Dave Thomas <dave@pragprog.com> Tue Oct 19 20:32:50 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp> - * ext/win32ole.c(ole_invoke): retrieve the result value when + * ext/win32ole.c(ole_invoke): retrieve the result value when retrying the IDispatch::invoke. Tue Oct 19 17:24:11 2004 Yukihiro Matsumoto <matz@ruby-lang.org> @@ -6625,19 +6625,20 @@ rb_provide(feature) rb_provide_feature(rb_str_new2(feature)); } -static void +static int load_wait(ftptr) char *ftptr; { st_data_t th; - if (!loading_tbl) return; - if (!st_lookup(loading_tbl, (st_data_t)ftptr, &th)) return; - if ((rb_thread_t)th == curr_thread) return; + if (!loading_tbl) return Qfalse; + if (!st_lookup(loading_tbl, (st_data_t)ftptr, &th)) return Qfalse; + if ((rb_thread_t)th == curr_thread) return Qtrue; do { CHECK_INTS; rb_thread_schedule(); } while (st_lookup(loading_tbl, (st_data_t)ftptr, &th)); + return Qtrue; } /* @@ -6762,13 +6763,11 @@ rb_require_safe(fname, safe) ruby_safe_level = safe; found = search_required(fname, &feature, &path); if (found) { - if (!path) { - load_wait(RSTRING(feature)->ptr); + if (!path || load_wait(RSTRING(feature)->ptr)) { result = Qfalse; } else { ruby_safe_level = 0; - rb_provide_feature(feature); switch (found) { case 'r': /* loading ruby library should be serialized. */ @@ -6795,6 +6794,7 @@ rb_require_safe(fname, safe) rb_ary_push(ruby_dln_librefs, LONG2NUM(handle)); break; } + rb_provide_feature(feature); result = Qtrue; } } |