1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* thread.c (rb_thread_s_async_interrupt_timing): have to check ints before jumpping out.

* test/ruby/test_thread.rb (test_async_interrupt_with_return): add test
	  rescue has to catch a queued async exception at the time of return.
	* test/ruby/test_thread.rb (test_async_interrupt_with_break): add test
	  rescue has to catch a queued async exception at the time of break.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38210 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
tarui 2012-12-05 09:54:58 +00:00
parent 592e87e1f8
commit 17a11774ca
3 changed files with 39 additions and 2 deletions

View file

@ -1,3 +1,12 @@
Wed Dec 5 18:53:00 2012 Masaya Tarui <tarui@ruby-lang.org>
* thread.c (rb_thread_s_async_interrupt_timing): have to check ints
before jumpping out.
* test/ruby/test_thread.rb (test_async_interrupt_with_return): add test
rescue has to catch a queued async exception at the time of return.
* test/ruby/test_thread.rb (test_async_interrupt_with_break): add test
rescue has to catch a queued async exception at the time of break.
Wed Dec 5 16:54:28 2012 Koichi Sasada <ko1@atdot.net>
* test/ruby/memory_status.rb: suppress warning.

View file

@ -564,6 +564,34 @@ class TestThread < Test::Unit::TestCase
}
end
def for_test_async_interrupt_with_return
Thread.async_interrupt_timing(Object => :defer){
Thread.current.raise RuntimeError.new("have to be rescured")
return
}
rescue
end
def test_async_interrupt_with_return
assert_nothing_raised do
for_test_async_interrupt_with_return
dummy_for_check_ints=nil
end
end
def test_async_interrupt_with_break
assert_nothing_raised do
begin
Thread.async_interrupt_timing(Object => :defer){
Thread.current.raise RuntimeError.new("have to be rescured")
break
}
rescue
end
dummy_for_check_ints=nil
end
end
def test_async_interrupt_blocking
r=:ng
e=Class.new(Exception)

View file

@ -1686,12 +1686,12 @@ rb_thread_s_async_interrupt_timing(VALUE self, VALUE mask_arg)
RUBY_VM_SET_INTERRUPT(th);
}
RUBY_VM_CHECK_INTS(th);
if (state) {
JUMP_TAG(state);
}
RUBY_VM_CHECK_INTS(th);
return r;
}