mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* thread.c (rb_thread_raise): check if target thread is
thrown by another thread or not. [ruby-dev:31371] * bootstraptest/test_thread.rb: add a test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12925 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
161b2e264f
commit
d7a19d0333
3 changed files with 27 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
Mon Aug 13 05:03:53 2007 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* thread.c (rb_thread_raise): check if target thread is
|
||||
thrown by another thread or not. [ruby-dev:31371]
|
||||
|
||||
* bootstraptest/test_thread.rb: add a test for above.
|
||||
|
||||
Mon Aug 13 04:35:30 2007 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* compile.c (iseq_peephole_optimize): fix peephole optimization
|
||||
|
@ -5,7 +12,6 @@ Mon Aug 13 04:35:30 2007 Koichi Sasada <ko1@atdot.net>
|
|||
|
||||
* bootstraptest/test_syntax.rb: add a test for above.
|
||||
|
||||
|
||||
Mon Aug 13 04:02:29 2007 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* vm_dump.c (debug_print_pre): fix to show control frame count.
|
||||
|
|
|
@ -169,3 +169,17 @@ assert_equal %q{11}, %q{
|
|||
Thread.current[:a]
|
||||
}.value + Thread.current[:a]
|
||||
}
|
||||
assert_equal %q{1000}, %q{
|
||||
begin
|
||||
1000.times do |i|
|
||||
begin
|
||||
Thread.start(Thread.current) {|u| u.raise }
|
||||
raise
|
||||
rescue
|
||||
ensure
|
||||
end
|
||||
end
|
||||
rescue
|
||||
1000
|
||||
end
|
||||
}, '[ruby-dev:31371]'
|
||||
|
|
7
thread.c
7
thread.c
|
@ -758,12 +758,17 @@ rb_thread_raise(int argc, VALUE *argv, rb_thread_t *th)
|
|||
{
|
||||
VALUE exc;
|
||||
|
||||
again:
|
||||
if (rb_thread_dead(th)) {
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
if (th->thrown_errinfo != 0 || th->raised_flag) {
|
||||
rb_thread_schedule();
|
||||
goto again;
|
||||
}
|
||||
|
||||
exc = rb_make_exception(argc, argv);
|
||||
/* TODO: need synchronization if run threads in parallel */
|
||||
th->thrown_errinfo = exc;
|
||||
rb_thread_ready(th);
|
||||
return Qnil;
|
||||
|
|
Loading…
Reference in a new issue