Weak Reference class that allows a referenced object to be garbage-collected. A WeakRef may be used exactly like the object it references.
Usage:
foo = Object.new foo = Object.new p foo.to_s # original's class foo = WeakRef.new(foo) p foo.to_s # should be same class ObjectSpace.garbage_collect p foo.to_s # should raise exception (recycled)
Creates a weak reference to orig
# File rake/lib/weakref.rb, line 51 def initialize(orig) @__id = orig.object_id ObjectSpace.define_finalizer orig, @@final ObjectSpace.define_finalizer self, @@final @@mutex.synchronize { @@id_map[@__id] = [] unless @@id_map[@__id] } @@id_map[@__id].push self.object_id @@id_rev_map[self.object_id] = @__id super end
Returns true if the referenced object is still alive.
# File rake/lib/weakref.rb, line 80 def weakref_alive? @@id_rev_map[self.object_id] == @__id end