YUKI Hiroshi
null+****@clear*****
Fri Nov 21 15:02:10 JST 2014
YUKI Hiroshi 2014-11-21 15:02:10 +0900 (Fri, 21 Nov 2014) New Revision: aa10780262e171a065841fc693fc89bab7d7e655 https://github.com/droonga/droonga-engine/commit/aa10780262e171a065841fc693fc89bab7d7e655 Message: Implement safer WeakMap based on WeakRef Modified files: lib/droonga/buffered_tcp_socket.rb Modified: lib/droonga/buffered_tcp_socket.rb (+7 -4) =================================================================== --- lib/droonga/buffered_tcp_socket.rb 2014-11-21 14:38:51 +0900 (5d4e8c9) +++ lib/droonga/buffered_tcp_socket.rb 2014-11-21 15:02:10 +0900 (47d034a) @@ -114,16 +114,18 @@ module Droonga else # XXX Ruby 1.9.x (installed by default on Ubuntu 14.0.4LTS etc.) # doesn't have WeakMap... + require "weakref" + class WeakMap def initialize @ids = {} end def [](key) - value_object_id = @ids[key.object_id] - if value_object_id + value_ref = @ids[key.object_id] + if value_ref and value_ref.weakref_alive? begin - ObjectSpace._id2ref(value_object_id) + value_ref.__getobj__ rescue RangeError nil end @@ -133,7 +135,8 @@ module Droonga end def []=(key, value) - @ids[key.object_id] = value.object_id + ref = WeakRef.new(value) + @ids[key.object_id] = ref value end end -------------- next part -------------- HTML����������������������������... 下載