diff options
-rw-r--r-- | ext/stringio/stringio.c | 5 | ||||
-rw-r--r-- | test/stringio/test_ractor.rb | 23 |
2 files changed, 28 insertions, 0 deletions
diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c index bb7c0e6e4e..228063d79b 100644 --- a/ext/stringio/stringio.c +++ b/ext/stringio/stringio.c @@ -1750,6 +1750,11 @@ void Init_stringio(void) { #undef rb_intern + +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + VALUE StringIO = rb_define_class("StringIO", rb_cData); rb_define_const(StringIO, "VERSION", rb_str_new_cstr(STRINGIO_VERSION)); diff --git a/test/stringio/test_ractor.rb b/test/stringio/test_ractor.rb new file mode 100644 index 0000000000..1c334e2c3f --- /dev/null +++ b/test/stringio/test_ractor.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true +require 'test/unit' + +class TestStringIOInRactor < Test::Unit::TestCase + def setup + omit unless defined? Ractor + end + + def test_ractor + assert_in_out_err([], <<-"end;", ["true"], []) + require "stringio" + $VERBOSE = nil + r = Ractor.new do + io = StringIO.new("") + io.puts "abc" + io.truncate(0) + io.puts "def" + "\0\0\0\0def\n" == io.string + end + puts r.take + end; + end +end |