diff --git a/lib/weakref.rb b/lib/weakref.rb index ee5444a..2882d9f 100644 --- a/lib/weakref.rb +++ b/lib/weakref.rb @@ -28,21 +28,19 @@ class WeakRef < Delegator @@id_rev_map = {} # ref -> obj @@mutex = Mutex.new @@final = lambda {|id| - @@mutex.synchronize { - rids = @@id_map[id] - if rids - for rid in rids - @@id_rev_map.delete(rid) - end - @@id_map.delete(id) - end - rid = @@id_rev_map[id] - if rid - @@id_rev_map.delete(id) - @@id_map[rid].delete(id) - @@id_map.delete(rid) if @@id_map[rid].empty? + rids = @@id_map[id] + if rids + for rid in rids + @@id_rev_map.delete(rid) end - } + @@id_map.delete(id) + end + rid = @@id_rev_map[id] + if rid + @@id_rev_map.delete(id) + @@id_map[rid].delete(id) + @@id_map.delete(rid) if @@id_map[rid].empty? + end } ##