Project

General

Profile

Actions

Bug #19372

open

Proc objects are not traversed for shareable check during Ractor.make_shareable(prok)

Added by luke-gru (Luke Gruber) almost 2 years ago. Updated almost 2 years ago.

Status:
Assigned
Target version:
-
[ruby-core:111992]

Description

class Proc
  attr_accessor :obj1
  def initialize
    @obj1 = Object.new
  end
end

p = true.instance_eval { Proc.new { puts "hi" } }
Ractor.make_shareable(p)
p "Obj1 frozen?", Ractor.shareable?(p.obj1)
P = p

r = Ractor.new do
  pp = P
  p pp.obj1 # gives error in debug builds (rb_ractor_confirm_belonging rb_bug() call)
end

Updated by luke-gru (Luke Gruber) almost 2 years ago

A separate but related issue is that the proc objects are not frozen too, so their ivars can be (re)assigned. I don't know how big an issue that is because
other ractors cannot read/write the ivars but IMO the proc should be frozen.

Updated by luke-gru (Luke Gruber) almost 2 years ago

No I don't think so, that change would just make it so that obj.freeze has the effect of making obj shareable for that class. However, prok.freeze should never make
procs shareable, they need to go through the isolation check.

Updated by hsbt (Hiroshi SHIBATA) almost 2 years ago

  • Status changed from Open to Assigned
  • Assignee set to ko1 (Koichi Sasada)
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0