From 0ead5c4983edcdef071eb4317b904d9d0419b388 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 20 Dec 2011 05:57:53 +0000 Subject: [PATCH] * test/ruby/test_require.rb (test_race_exception): rewrote without global attribute. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_require.rb | 50 +++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/test/ruby/test_require.rb b/test/ruby/test_require.rb index 9186a6f623..8b9c9d7a01 100644 --- a/test/ruby/test_require.rb +++ b/test/ruby/test_require.rb @@ -340,57 +340,57 @@ class TestRequire < Test::Unit::TestCase bug3756) end - class << self - attr_accessor :scratch - end - def test_race_exception bug5754 = '[ruby-core:41618]' tmp = Tempfile.new(%w"bug5754 .rb") path = tmp.path - tmp.print <<-EOS -TestRequire.scratch << :pre -Thread.pass until t2 = TestRequire.scratch[1] -Thread.pass until t2.stop? -open(__FILE__, "w") {|f| f.puts "TestRequire.scratch << :post"} -raise "con1" - EOS + tmp.print %{\ + th = Thread.current + t = th[:t] + scratch = th[:scratch] + + if scratch.empty? + scratch << :pre + Thread.pass until t.stop? + raise RuntimeError + else + scratch << :post + end + } tmp.close - fin = false + start = false - TestRequire.scratch = scratch = [] + scratch = [] t1_res = nil t2_res = nil t1 = Thread.new do + Thread.pass until start begin require(path) rescue RuntimeError end t1_res = require(path) - - Thread.pass until fin - scratch << :t1 end t2 = Thread.new do Thread.pass until scratch[0] - begin - scratch << t2 - t2_res = require(path) - scratch << :t2 - ensure - fin = true - end + t2_res = require(path) end + t1[:scratch] = t2[:scratch] = scratch + t1[:t] = t2 + t2[:t] = t1 + + start = true + assert_nothing_raised(ThreadError, bug5754) {t1.join} assert_nothing_raised(ThreadError, bug5754) {t2.join} - assert_equal(true, (t1_res ^ t2_res), bug5754) - assert_equal([:pre, t2, :post, :t2, :t1], scratch, bug5754) + assert_equal(true, (t1_res ^ t2_res), bug5754 + " t1:#{t1_res} t2:#{t2_res}") + assert_equal([:pre, :post], scratch, bug5754) ensure tmp.close(true) if tmp end