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)
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
5870end
You can’t perform that action at this time.
0 commit comments