From cf59e1476d01be27dc88cbee5f6c6cf87f007043 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Sun, 22 Dec 2019 06:28:13 +0900 Subject: fix a thread test. * Use Queue for synchronization. * Don't use `sleep 0.2` and use `th.join` because created thread can raise an exception after 0.2 seconds. --- test/ruby/test_thread.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'test') diff --git a/test/ruby/test_thread.rb b/test/ruby/test_thread.rb index bf61a28f4d..f8127d8786 100644 --- a/test/ruby/test_thread.rb +++ b/test/ruby/test_thread.rb @@ -795,14 +795,15 @@ class TestThread < Test::Unit::TestCase end def test_handle_interrupt_blocking - r=:ng - e=Class.new(Exception) + r = nil + q = Queue.new + e = Class.new(Exception) th_s = Thread.current - th = Thread.start{ + th = Thread.start { assert_raise(RuntimeError) { Thread.handle_interrupt(Object => :on_blocking){ begin - Thread.pass until r == :wait + q.pop Thread.current.raise RuntimeError, "will raise in sleep" r = :ok sleep @@ -812,9 +813,8 @@ class TestThread < Test::Unit::TestCase } } } - assert_raise(e) {r = :wait; sleep 0.2} - th.join - assert_equal(:ok,r) + assert_raise(e) {q << true; th.join} + assert_equal(:ok, r) end def test_handle_interrupt_and_io -- cgit v1.2.3