summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/io/wait/wait.c4
-rw-r--r--test/io/wait/test_ractor.rb22
2 files changed, 26 insertions, 0 deletions
diff --git a/ext/io/wait/wait.c b/ext/io/wait/wait.c
index 5c1a704766..512e4f6a80 100644
--- a/ext/io/wait/wait.c
+++ b/ext/io/wait/wait.c
@@ -273,6 +273,10 @@ io_wait(int argc, VALUE *argv, VALUE io)
void
Init_wait(void)
{
+#ifdef HAVE_RB_EXT_RACTOR_SAFE
+ RB_EXT_RACTOR_SAFE(true);
+#endif
+
rb_define_method(rb_cIO, "nread", io_nread, 0);
rb_define_method(rb_cIO, "ready?", io_ready_p, 0);
diff --git a/test/io/wait/test_ractor.rb b/test/io/wait/test_ractor.rb
new file mode 100644
index 0000000000..3d286af77f
--- /dev/null
+++ b/test/io/wait/test_ractor.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+require 'test/unit'
+require 'rbconfig'
+require 'io/wait'
+
+class TestIOWaitInRactor < Test::Unit::TestCase
+ def setup
+ omit unless defined? Ractor
+ end
+
+ def test_ractor
+ ext = "/io/wait.#{RbConfig::CONFIG['DLEXT']}"
+ path = $".find {|path| path.end_with?(ext)}
+ assert_in_out_err(%W[-r#{path}], <<-"end;", ["true"], [])
+ $VERBOSE = nil
+ r = Ractor.new do
+ $stdout.equal?($stdout.wait_writable)
+ end
+ puts r.take
+ end;
+ end
+end