# File lib/Borges/Utilities/WeakIdentityKeyHash.rb, line 40 def self.make_finalizer(internal_id, hash_id) return proc do |id| Thread.exclusive do rids = ID_MAP[id] if rids then for rid in rids ID_REV_MAP.delete rid end ID_MAP.delete id end rid = ID_REV_MAP[id] if rid then ID_REV_MAP.delete id ID_MAP[rid].delete id ID_MAP.delete rid if ID_MAP[rid].empty? end end unless hash_id.nil? then hash = ObjectSpace._id2ref hash_id hash.delete_if do |k, v| k.internal_id == internal_id rescue true end unless hash.nil? end end end