diff options
Diffstat (limited to 'test/thread')
-rw-r--r-- | test/thread/test_queue.rb | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/test/thread/test_queue.rb b/test/thread/test_queue.rb index e54decdafc..4f3eff00a0 100644 --- a/test/thread/test_queue.rb +++ b/test/thread/test_queue.rb @@ -1,5 +1,6 @@ require 'test/unit' require 'thread' +require 'tmpdir' require_relative '../ruby/envutil' class TestQueue < Test::Unit::TestCase @@ -57,18 +58,28 @@ class TestQueue < Test::Unit::TestCase def test_thr_kill bug5343 = '[ruby-core:39634]' - assert_normal_exit(<<-'_eom', bug5343, {:timeout => 20}) - require "thread" - 2000.times do - queue = Queue.new - r, w = IO.pipe - th = Thread.start { - queue.push(nil) - r.read 1 - } - queue.pop - th.kill.join + Dir.mktmpdir {|d| + timeout = 20 + total_loop = 2000 + begin + assert_normal_exit(<<-"_eom", bug5343, {:timeout => timeout, :chdir=>d}) + require "thread" + #{total_loop}.times do |i| + open("test_thr_kill_count", "w") {|f| f.puts i } + queue = Queue.new + r, w = IO.pipe + th = Thread.start { + queue.push(nil) + r.read 1 + } + queue.pop + th.kill.join + end + _eom + rescue Timeout::Error + count = File.read("#{d}/test_thr_kill_count").to_i + flunk "only #{count} times looped in #{timeout} seconds. (should run #{total_loop} times)" end - _eom + } end end |