aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenta Murata <mrkn@users.noreply.github.com>2020-12-20 00:40:47 +0900
committerGitHub <noreply@github.com>2020-12-20 00:40:47 +0900
commitde80b928910b7ca785725382cec53cb27f1d65ed (patch)
tree2d2c327c2865e047e6d5e4402488a3eac54b263a
parentd62414b48fbb944cc9e4442ad7d04d40a27fa4e9 (diff)
downloadruby-de80b928910b7ca785725382cec53cb27f1d65ed.tar.gz
[pathname] Make Pathname Ractor safe (#3940)
-rw-r--r--ext/pathname/pathname.c4
-rw-r--r--test/pathname/test_ractor.rb22
2 files changed, 26 insertions, 0 deletions
diff --git a/ext/pathname/pathname.c b/ext/pathname/pathname.c
index f71cec1b25..6f4c8d23b5 100644
--- a/ext/pathname/pathname.c
+++ b/ext/pathname/pathname.c
@@ -1512,6 +1512,10 @@ path_f_pathname(VALUE self, VALUE str)
void
Init_pathname(void)
{
+#ifdef HAVE_RB_EXT_RACTOR_SAFE
+ rb_ext_ractor_safe(true);
+#endif
+
InitVM(pathname);
rb_cPathname = rb_define_class("Pathname", rb_cObject);
diff --git a/test/pathname/test_ractor.rb b/test/pathname/test_ractor.rb
new file mode 100644
index 0000000000..9ce43ef640
--- /dev/null
+++ b/test/pathname/test_ractor.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+require "test/unit"
+require "pathname"
+
+class TestPathnameRactor < Test::Unit::TestCase
+ def setup
+ skip unless defined? Ractor
+ end
+
+ def test_ractor_shareable
+ assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}")
+ begin;
+ $VERBOSE = nil
+ require "pathname"
+ r = Ractor.new Pathname("a") do |x|
+ x.join(Pathname("b"), Pathname("c"))
+ end
+ assert_equal(Pathname("a/b/c"), r.take)
+ end;
+ end
+end
+