File tree Expand file tree Collapse file tree 1 file changed +15
-3
lines changed Expand file tree Collapse file tree 1 file changed +15
-3
lines changed Original file line number Diff line number Diff line change @@ -36,13 +36,13 @@ def initialize(orig)
36
36
when true , false , nil
37
37
@delegate_sd_obj = orig
38
38
else
39
- @@__map [ self ] = orig
39
+ weakref_map [ self ] = orig
40
40
end
41
41
super
42
42
end
43
43
44
44
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 :
46
46
Kernel ::raise ( RefError , "Invalid Reference - probably recycled" , Kernel ::caller ( 2 ) )
47
47
end
48
48
@@ -53,6 +53,18 @@ def __setobj__(obj) # :nodoc:
53
53
# Returns true if the referenced object is still alive.
54
54
55
55
def weakref_alive?
56
- @@__map . key? ( self ) or defined? ( @delegate_sd_obj )
56
+ weakref_map . key? ( self ) or defined? ( @delegate_sd_obj )
57
57
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
58
70
end
You can’t perform that action at this time.
0 commit comments