From 00d7a3cca62b19c34df66b337582a7c15c4b4848 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 8 Dec 2011 17:59:26 -0800 Subject: pool: O(1) object validity checking Now that pools can be arbitrarily large, using an O(n) check for object validity can be expensive. --- lib/mogilefs/pool.rb | 13 +++++-------- 1 file 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) -- cgit v1.2.3-24-ge0c7