Project

General

Profile

Actions

Bug #19765

open

Ractor.make_shareable ignores self of a proc created from a Method

Added by Ethan (Ethan -) over 1 year ago. Updated 8 months ago.

Status:
Assigned
Target version:
-
ruby -v:
ruby 3.3.0dev (2023-07-12T00:26:03Z master dfe782be17) [x86_64-darwin21]
[ruby-core:114147]

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
# => "!"

Related, maybe:
#19372
#19374

Tangential: why does Proc cause Ractor::IsolationError but Method causes Ractor::Error?

Actions

Also available in: Atom PDF

Like0
Like0Like0