diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-02 01:47:43 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-02 01:47:43 +0000 |
commit | 71ef1c8a368de970ff9e1b49f737aeebc8b0c91a (patch) | |
tree | a069619887dfdd23318a310699c1b210f0f44aa8 | |
parent | eac53b3b02832bddf34d2b253fb05d0bec072b91 (diff) | |
download | ruby-71ef1c8a368de970ff9e1b49f737aeebc8b0c91a.tar.gz |
cont.c: fix root fiber to_s
* cont.c (fiber_to_s): fix Fiber#to_s on root fibers which have no
procs. [ruby-core:82629] [Bug #13859]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59721 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | cont.c | 9 | ||||
-rw-r--r-- | test/ruby/test_fiber.rb | 1 |
2 files changed, 9 insertions, 1 deletions
@@ -1753,8 +1753,15 @@ fiber_to_s(VALUE fibval) char status_info[0x10]; GetFiberPtr(fibval, fib); - GetProcPtr(fib->first_proc, proc); snprintf(status_info, 0x10, " (%s)", fiber_status_name(fib->status)); + if (!rb_obj_is_proc(fib->first_proc)) { + VALUE str = rb_any_to_s(fibval); + strlcat(status_info, ">", sizeof(status_info)); + rb_str_set_len(str, RSTRING_LEN(str)-1); + rb_str_cat_cstr(str, status_info); + return str; + } + GetProcPtr(fib->first_proc, proc); return rb_block_to_s(fibval, &proc->block, status_info); } diff --git a/test/ruby/test_fiber.rb b/test/ruby/test_fiber.rb index 8fe2cf5be8..59290545f6 100644 --- a/test/ruby/test_fiber.rb +++ b/test/ruby/test_fiber.rb @@ -363,6 +363,7 @@ class TestFiber < Test::Unit::TestCase assert_match(/suspended/, f.to_s) f.resume assert_match(/terminated/, f.to_s) + assert_match(/resumed/, Fiber.current.to_s) end end |