mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 16:44:01 +02:00
merges r23616 from trunk into ruby_1_9_1.
-- * cont.c (cont_capture, fiber_store): reraise transferred error. * cont.c (fiber_switch): transfers dead fiber error to the previouse or root fiber if the current fiber is dead. [ruby-core:23651] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@23766 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
33b5635a51
commit
41353c51a0
4 changed files with 25 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Mon Jun 1 11:21:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* cont.c (cont_capture, fiber_store): reraise transferred error.
|
||||||
|
|
||||||
|
* cont.c (fiber_switch): transfers dead fiber error to the previouse
|
||||||
|
or root fiber if the current fiber is dead. [ruby-core:23651]
|
||||||
|
|
||||||
Mon Jun 1 07:20:02 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Mon Jun 1 07:20:02 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): returns Inf if
|
* ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): returns Inf if
|
||||||
|
|
14
cont.c
14
cont.c
|
@ -279,6 +279,7 @@ cont_capture(volatile int *stat)
|
||||||
VALUE value;
|
VALUE value;
|
||||||
|
|
||||||
value = cont->value;
|
value = cont->value;
|
||||||
|
if (cont->argc == -1) rb_exc_raise(value);
|
||||||
cont->value = Qnil;
|
cont->value = Qnil;
|
||||||
*stat = 1;
|
*stat = 1;
|
||||||
return value;
|
return value;
|
||||||
|
@ -832,6 +833,7 @@ fiber_store(rb_fiber_t *next_fib)
|
||||||
if (ruby_setjmp(fib->cont.jmpbuf)) {
|
if (ruby_setjmp(fib->cont.jmpbuf)) {
|
||||||
/* restored */
|
/* restored */
|
||||||
GetFiberPtr(th->fiber, fib);
|
GetFiberPtr(th->fiber, fib);
|
||||||
|
if (fib->cont.argc == -1) rb_exc_raise(fib->cont.value);
|
||||||
return fib->cont.value;
|
return fib->cont.value;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -857,7 +859,15 @@ fiber_switch(VALUE fibval, int argc, VALUE *argv, int is_resume)
|
||||||
rb_raise(rb_eFiberError, "fiber called across trap");
|
rb_raise(rb_eFiberError, "fiber called across trap");
|
||||||
}
|
}
|
||||||
else if (fib->status == TERMINATED) {
|
else if (fib->status == TERMINATED) {
|
||||||
rb_raise(rb_eFiberError, "dead fiber called");
|
value = rb_exc_new2(rb_eFiberError, "dead fiber called");
|
||||||
|
if (th->fiber != fibval) rb_exc_raise(value);
|
||||||
|
fibval = fib->prev;
|
||||||
|
if (NIL_P(fibval)) fibval = th->root_fiber;
|
||||||
|
GetFiberPtr(fibval, fib);
|
||||||
|
cont = &fib->cont;
|
||||||
|
cont->argc = -1;
|
||||||
|
cont->value = value;
|
||||||
|
cont_restore_0(cont, &value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_resume) {
|
if (is_resume) {
|
||||||
|
@ -868,7 +878,7 @@ fiber_switch(VALUE fibval, int argc, VALUE *argv, int is_resume)
|
||||||
cont->value = make_passing_arg(argc, argv);
|
cont->value = make_passing_arg(argc, argv);
|
||||||
|
|
||||||
if ((value = fiber_store(fib)) == Qundef) {
|
if ((value = fiber_store(fib)) == Qundef) {
|
||||||
cont_restore_0(&fib->cont, &value);
|
cont_restore_0(cont, &value);
|
||||||
rb_bug("rb_fiber_resume: unreachable");
|
rb_bug("rb_fiber_resume: unreachable");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -164,5 +164,10 @@ class TestFiber < Test::Unit::TestCase
|
||||||
assert_equal(nil, Thread.current[:v]); fb.resume
|
assert_equal(nil, Thread.current[:v]); fb.resume
|
||||||
assert_equal(nil, Thread.current[:v]);
|
assert_equal(nil, Thread.current[:v]);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_resume_self
|
||||||
|
f = Fiber.new {f.resume}
|
||||||
|
assert_raise(FiberError, '[ruby-core:23651]') {f.transfer}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#define RUBY_VERSION "1.9.1"
|
#define RUBY_VERSION "1.9.1"
|
||||||
#define RUBY_RELEASE_DATE "2009-05-22"
|
#define RUBY_RELEASE_DATE "2009-05-22"
|
||||||
#define RUBY_PATCHLEVEL 164
|
#define RUBY_PATCHLEVEL 165
|
||||||
#define RUBY_VERSION_MAJOR 1
|
#define RUBY_VERSION_MAJOR 1
|
||||||
#define RUBY_VERSION_MINOR 9
|
#define RUBY_VERSION_MINOR 9
|
||||||
#define RUBY_VERSION_TEENY 1
|
#define RUBY_VERSION_TEENY 1
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue