Fix Ractor.make_shareable
for recursive structures with unfreezable components
Followup to #3823
This commit is contained in:
parent
750e2d9e5e
commit
e25165b3fc
Notes:
git
2020-12-01 09:34:07 +09:00
@ -984,6 +984,17 @@ assert_equal '[false, false]', %q{
|
|||||||
[Ractor.shareable?(x), Ractor.shareable?(y)]
|
[Ractor.shareable?(x), Ractor.shareable?(y)]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Ractor.make_shareable(recursive_objects)
|
||||||
|
assert_equal '[:ok, false, false]', %q{
|
||||||
|
o = Object.new
|
||||||
|
def o.freeze; raise; end
|
||||||
|
y = []
|
||||||
|
x = [y, o].freeze
|
||||||
|
y << x
|
||||||
|
y.freeze
|
||||||
|
[(Ractor.make_shareable(x) rescue :ok), Ractor.shareable?(x), Ractor.shareable?(y)]
|
||||||
|
}
|
||||||
|
|
||||||
# define_method() can invoke different Ractor's proc if the proc is shareable.
|
# define_method() can invoke different Ractor's proc if the proc is shareable.
|
||||||
assert_equal '1', %q{
|
assert_equal '1', %q{
|
||||||
class C
|
class C
|
||||||
|
Loading…
x
Reference in New Issue
Block a user