about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-12-08 17:59:26 -0800
committerEric Wong <normalperson@yhbt.net>2011-12-08 18:06:29 -0800
commit00d7a3cca62b19c34df66b337582a7c15c4b4848 (patch)
treeb96a52107458fd065c41fa5e789f77f6017da0e4
parent3e80aa8b62dd1b9e1d78e4c1c487f1ea5ee162cd (diff)
downloadmogilefs-client-00d7a3cca62b19c34df66b337582a7c15c4b4848.tar.gz
Now that pools can be arbitrarily large, using an O(n) check
for object validity can be expensive.
-rw-r--r--lib/mogilefs/pool.rb13
1 files changed, 5 insertions, 8 deletions
diff --git a/lib/mogilefs/pool.rb b/lib/mogilefs/pool.rb
index 1c220fd..21503ba 100644
--- a/lib/mogilefs/pool.rb
+++ b/lib/mogilefs/pool.rb
@@ -17,19 +17,16 @@ class MogileFS::Pool
     @args = args
     @klass = klass
     @queue = Queue.new
-    @objects = []
+    @objects = {}
     @purge_threshold = 5
     @purge_keep = 2
   end
 
   def get
-    begin
-      object = @queue.pop true
-    rescue ThreadError
-      object = @klass.new(*@args)
-      @objects << object
-    end
-    object
+    @queue.pop true
+  rescue ThreadError
+    object = @klass.new(*@args)
+    @objects[object] = object
   end
 
   def put(o)