Actions
Bug #19765
closed
Ractor.make_shareable ignores self of a proc created from a Method
ruby -v:
ruby 3.3.0dev (2023-07-12T00:26:03Z master dfe782be17) [x86_64-darwin21]
Description
An unshareable receiver of a Proc or a Method will cause make_shareable to error, but this does not happen with a proc from Method#to_proc:
str = ""
a = str.instance_exec { proc { to_s } }
Ractor.make_shareable a
# => <internal:ractor>:820:in `make_shareable': Proc's self is not shareable: #<Proc:0x00000001064b62c8 (irb):1> (Ractor::IsolationError)
b = str.instance_exec { method(:to_s) }
Ractor.make_shareable b
# => <internal:ractor>:820:in `make_shareable': can not make shareable object for #<Method: String#to_s()> (Ractor::Error)
c = str.instance_exec { method(:to_s).to_proc }
Ractor.make_shareable c
c.call
# => ""
str[0] = "!"
c.call
# => "!"
Tangential: why does Proc cause Ractor::IsolationError but Method causes Ractor::Error?
Updated by mame (Yusuke Endoh) over 1 year ago
- Assignee set to ko1 (Koichi Sasada)
Updated by hsbt (Hiroshi SHIBATA) about 1 year ago
- Status changed from Open to Assigned
Updated by jhawthorn (John Hawthorn) 20 days ago
- Status changed from Assigned to Closed
- Assignee changed from ko1 (Koichi Sasada) to ractor
- Target version set to 3.5
This should be fixed by git|d80f3a287c5c8d0404b6cb837db360cab320cde1
The third example now also raises can not make shareable object for #<Method: String#to_s()>
Actions
Like0
Like0Like0Like0