File objects are currently shareable, as are other extension objects that shouldn't be.
I don't know the internals of file.c but I don't think files are thread-safe.
Actions #1 [ruby-core:112013]
Updated by luke-gru (Luke Gruber) 5 months ago
- Subject changed from File objects are currently shareable to File objects are currently shareable, as are other extension objects that shouldn't be.
The issue is with
The same issue occurs with Dir, Tempfile, IO objects, the ENV hash. StringIO and CSV have this problem too. Sockets I think have the issue.
For example, the issue with StringIO is that it needs an initialize_clone method that dup's the string. The underlying issue, though, is that it's a TypedData and doesn't
store its internals in instance variables to be checked by the sharing logic.
require 'stringio' str = "string".dup stringio = StringIO.new(str) rs = 100.times.map do Ractor.new do strio = receive p strio.string.object_id p strio.string.frozen? end end p stringio.string.object_id rs.each do |r| r.send(stringio) end rs.each(&:take)