Skip to content

Commit 74341b5

Browse files
committed
Improve Ractor-compliance
1 parent 40c58d0 commit 74341b5

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
@@ -39,13 +39,13 @@ def initialize(orig)
3939
when true, false, nil
4040
@delegate_sd_obj = orig
4141
else
42-
@@__map[self] = orig
42+
weakref_map[self] = orig
4343
end
4444
super
4545
end
4646

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

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

5858
def weakref_alive?
59-
@@__map.key?(self) or defined?(@delegate_sd_obj)
59+
weakref_map.key?(self) or defined?(@delegate_sd_obj)
6060
end
61+
62+
def weakref_map
63+
if defined?(::Object::Ractor)
64+
if Ractor.current[:__WeakRef_map__].nil?
65+
Ractor.current[:__WeakRef_map__] = ::ObjectSpace::WeakMap.new
66+
end
67+
Ractor.current[:__WeakRef_map__]
68+
else
69+
@@__map
70+
end
71+
end
72+
private :weakref_map
6173
end

0 commit comments

Comments
 (0)