diff options
author | Delton Ding <dsh0416@gmail.com> | 2020-12-22 15:30:59 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2020-12-23 03:27:14 +0900 |
commit | c6d7e02b90f96d9bcd04edd48b7374f31c510b2a (patch) | |
tree | 294b80840d1c00a9f9117f1608cc8abd7599f6ba | |
parent | 487355873ad0de9ab70611d63d97f3fbbfebe79d (diff) | |
download | ruby-c6d7e02b90f96d9bcd04edd48b7374f31c510b2a.tar.gz |
Enable `Fiber.current` and `Fiber#alive?` call inside ractor
-rw-r--r-- | cont.c | 3 | ||||
-rw-r--r-- | test/fiber/test_ractor.rb | 22 |
2 files changed, 25 insertions, 0 deletions
@@ -2744,6 +2744,9 @@ ruby_Init_Continuation_body(void) void ruby_Init_Fiber_as_Coroutine(void) { +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif rb_define_method(rb_cFiber, "transfer", rb_fiber_m_transfer, -1); rb_define_method(rb_cFiber, "alive?", rb_fiber_alive_p, 0); rb_define_singleton_method(rb_cFiber, "current", rb_fiber_s_current, 0); diff --git a/test/fiber/test_ractor.rb b/test/fiber/test_ractor.rb new file mode 100644 index 0000000000..6d53b617d9 --- /dev/null +++ b/test/fiber/test_ractor.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true +require "test/unit" +require "fiber" + +class TestFiberCurrentRactor < Test::Unit::TestCase + def setup + skip unless defined? Ractor + end + + def test_ractor_shareable + assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}") + begin; + require "fiber" + r = Ractor.new do + Fiber.new do + Fiber.current.class + end.resume + end + assert_equal(Fiber, r.take) + end; + end +end |