[ruby/etc] Make Ractor safe

This commit is contained in:
Marc-Andre Lafortune 2020-12-21 23:31:11 -05:00 committed by Marc-André Lafortune
parent 3286380ebc
commit cd63f0358f
Notes: git 2020-12-23 09:46:32 +09:00
3 changed files with 46 additions and 14 deletions

View file

@ -169,4 +169,27 @@ class TestEtc < Test::Unit::TestCase
assert_operator(1, :<=, n)
end
def test_ractor
return unless Etc.passwd # => skip test if no platform support
assert_ractor(<<~RUBY, require: 'etc')
ractor = Ractor.new do
Etc.passwd do |s|
Ractor.yield :sync
Ractor.yield s.name
break :done
end
end
ractor.take # => :sync
assert_raise RuntimeError, /parallel/ do
Etc.passwd {}
end
name = ractor.take # => first name
ractor.take # => :done
name2 = Etc.passwd do |s|
break s.name
end
assert_equal(name2, name)
RUBY
end
end