[Groonga-commit] droonga/droonga-engine at aa10780 [master] Implement safer WeakMap based on WeakRef

Back to archive index

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����������������������������...
下載 



More information about the Groonga-commit mailing list
Back to archive index