Skip to content

Commit 086942d

Browse files
rm155hsbt
authored andcommitted
Improve Ractor-compliance
1 parent 68c61e7 commit 086942d

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

lib/weakref.rb

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ def initialize(orig)
3636
when true, false, nil
3737
@delegate_sd_obj = orig
3838
else
39-
@@__map[self] = orig
39+
weakref_map[self] = orig
4040
end
4141
super
4242
end
4343

4444
def __getobj__ # :nodoc:
45-
@@__map[self] or defined?(@delegate_sd_obj) ? @delegate_sd_obj :
45+
weakref_map[self] or defined?(@delegate_sd_obj) ? @delegate_sd_obj :
4646
Kernel::raise(RefError, "Invalid Reference - probably recycled", Kernel::caller(2))
4747
end
4848

@@ -53,6 +53,18 @@ def __setobj__(obj) # :nodoc:
5353
# Returns true if the referenced object is still alive.
5454

5555
def weakref_alive?
56-
@@__map.key?(self) or defined?(@delegate_sd_obj)
56+
weakref_map.key?(self) or defined?(@delegate_sd_obj)
5757
end
58+
59+
def weakref_map
60+
if defined?(::Object::Ractor)
61+
if Ractor.current[:__WeakRef_map__].nil?
62+
Ractor.current[:__WeakRef_map__] = ::ObjectSpace::WeakMap.new
63+
end
64+
Ractor.current[:__WeakRef_map__]
65+
else
66+
@@__map
67+
end
68+
end
69+
private :weakref_map
5870
end

0 commit comments

Comments
 (0)