diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | cont.c | 7 | ||||
-rw-r--r-- | test/ruby/test_fiber.rb | 10 |
3 files changed, 20 insertions, 3 deletions
@@ -1,3 +1,9 @@ +Thu Jun 7 12:48:33 2007 Koichi Sasada <ko1@atdot.net> + + * cont.c (cont_restore_1): fix to check root fiber [ruby-dev:30911]. + + * test/ruby/test_fiber.rb: add a test. + Thu Jun 07 07:24:36 2007 NARUSE, Yui <naruse@ruby-lang.org> * lib/json/common.rb: Ponder offering parse! method. @@ -173,11 +173,14 @@ cont_restore_1(rb_context_t *cont) } else { /* continuation */ + VALUE fval; + th->fiber = sth->fiber; + fval = th->fiber ? th->fiber : th->root_fiber; - if (th->fiber) { + if (fval) { rb_context_t *fcont; - GetContPtr(th->fiber, fcont); + GetContPtr(fval, fcont); th->stack_size = fcont->saved_thread.stack_size; th->stack = fcont->saved_thread.stack; } diff --git a/test/ruby/test_fiber.rb b/test/ruby/test_fiber.rb index c99e302b19..6c67a5815d 100644 --- a/test/ruby/test_fiber.rb +++ b/test/ruby/test_fiber.rb @@ -116,7 +116,15 @@ class TestFiber < Test::Unit::TestCase f2 = Fiber.new do c.call end - assert_equal(f1.yield, :ok) + assert_equal(:ok, f1.yield) + + assert_equal(:ok, + callcc {|c| + Fiber.new { + c.call :ok + }.yield + } + ) end end |