aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDelton Ding <dsh0416@gmail.com>2020-12-22 15:30:59 +0900
committerKoichi Sasada <ko1@atdot.net>2020-12-23 03:27:14 +0900
commitc6d7e02b90f96d9bcd04edd48b7374f31c510b2a (patch)
tree294b80840d1c00a9f9117f1608cc8abd7599f6ba
parent487355873ad0de9ab70611d63d97f3fbbfebe79d (diff)
downloadruby-c6d7e02b90f96d9bcd04edd48b7374f31c510b2a.tar.gz
Enable `Fiber.current` and `Fiber#alive?` call inside ractor
-rw-r--r--cont.c3
-rw-r--r--test/fiber/test_ractor.rb22
2 files changed, 25 insertions, 0 deletions
diff --git a/cont.c b/cont.c
index 123ca33f36..4a9e75759a 100644
--- a/cont.c
+++ b/cont.c
@@ -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