diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | internal.h | 1 | ||||
-rw-r--r-- | load.c | 3 | ||||
-rw-r--r-- | test/ruby/test_require.rb | 17 | ||||
-rw-r--r-- | vm_backtrace.c | 29 |
5 files changed, 49 insertions, 9 deletions
@@ -1,3 +1,11 @@ Tue Oct 8 21:03:35 2013 Koichi Sasada <[email protected]> * vm_backtrace.c, include/ruby/debug.h: add new APIs @@ -744,6 +744,7 @@ VALUE rb_make_backtrace(void); void rb_backtrace_print_as_bugreport(void); int rb_backtrace_p(VALUE obj); VALUE rb_backtrace_to_str_ary(VALUE obj); VALUE rb_vm_backtrace_object(); RUBY_SYMBOL_EXPORT_BEGIN @@ -706,8 +706,7 @@ load_lock(const char *ftptr) } if (RTEST(ruby_verbose)) { rb_warning("loading in progress, circular require considered harmful - %s", ftptr); - /* TODO: display to $stderr, not stderr in C */ - rb_backtrace(); } switch (rb_thread_shield_wait((VALUE)data)) { case Qfalse: @@ -399,6 +399,7 @@ class TestRequire < Test::Unit::TestCase def test_race_exception bug5754 = '[ruby-core:41618]' path = nil Tempfile.create(%w"bug5754 .rb") {|tmp| path = tmp.path tmp.print %{\ @@ -416,12 +417,11 @@ class TestRequire < Test::Unit::TestCase } tmp.close - # "circular require" warnings to $stderr, but backtraces to stderr - # in C-level. And redirecting stderr to a pipe seems to change - # some blocking timings and causes a deadlock, so run in a - # separated process for the time being. - assert_separately(["-w", "-", path, bug5754], <<-'end;', ignore_stderr: true) - path, bug5754 = *ARGV start = false scratch = [] @@ -454,9 +454,12 @@ class TestRequire < Test::Unit::TestCase assert_equal(true, (t1_res ^ t2_res), bug5754 + " t1:#{t1_res} t2:#{t2_res}") assert_equal([:pre, :post], scratch, bug5754) - end; } ensure $".delete(path) end @@ -768,6 +768,35 @@ rb_backtrace(void) vm_backtrace_print(stderr); } VALUE rb_make_backtrace(void) { |