From: "mame (Yusuke Endoh) via ruby-core" Date: 2025-02-13T09:21:01+00:00 Subject: [ruby-core:120973] [Ruby master Feature#21028] Method for finding why an object isn't Ractor shareable Issue #21028 has been updated by mame (Yusuke Endoh). Is `ObjectSpace.reachable_objects_from` usable for the use case? It's a bit tedious, but I think it's more flexible not only to get an unshareable object, but also to get the path to the object in question. ```ruby require "objspace" def find_path_to_unshareable_object(obj, path = [], visited = {}) path += [obj] return if visited[obj] visited[obj] = true return if Ractor.shareable?(obj) objs = ObjectSpace.reachable_objects_from(obj) return path if objs.all? { Ractor.shareable?(it) } objs.each do |obj2| res = find_path_to_unshareable_object(obj2, path, visited) return res if res end return nil end pp *find_path_to_unshareable_object([1, 2, 3, "str".freeze, { :key => -> {} }]) #=> [1, 2, 3, "str", {key: #}] #=> {key: #} #=> # #=> main ``` ---------------------------------------- Feature #21028: Method for finding why an object isn't Ractor shareable https://bugs.ruby-lang.org/issues/21028#change-111874 * Author: tenderlovemaking (Aaron Patterson) * Status: Open * Assignee: tenderlovemaking (Aaron Patterson) ---------------------------------------- `Ractor.shareable?` is easy to use, but if it returns false I would like to be able to figure out what object is causing the data structure to _not_ be Ractor shareable. The context is that I'm trying to make some complex data structures in Rails deeply frozen. If they are deeply frozen they _should_ be Ractor shareable, but `Ractor.shareable?` is returning `false` and it's hard for me to figure out _why_. I would like a method that would either return all unshareable references, or a method that takes a block and unshareable references are yielded to the block. A method like `Ractor.unshareable_references?` or maybe `Ractor.shareable?(obj) { |not_shareable_obj| }` would be very helpful for discovering why an object is not shareable. Thanks! -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/