mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									fa1bf8ab37
								
							
						
					
					
						commit
						cf59e1476d
					
				
					 1 changed files with 7 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue