diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-06-07 03:48:13 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-06-07 03:48:13 +0000 |
commit | 8620de6b042f2c069a25d7fdbf5b1d5a3ffd87a9 (patch) | |
tree | 3d81704bfc7da4924e439606c392d64180fb74a5 | |
parent | b60d64b001c8819e6626b00efbeae96560368a08 (diff) | |
download | ruby-8620de6b042f2c069a25d7fdbf5b1d5a3ffd87a9.tar.gz |
* cont.c (cont_restore_1): fix to check root fiber [ruby-dev:30911].
* test/ruby/test_fiber.rb: add a test.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12457 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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 |