new (Extlib::Pooling::Pool)

    # File lib/extlib/pooling.rb, line 154
          def new
            instance = nil
            begin
              lock.synchronize do
                if @available.size > 0
                  instance = @available.pop
                  @used[instance.object_id] = instance
                elsif @used.size < @max_size
                  instance = @resource.__new(*@args)
                  raise InvalidResourceError.new("#{@resource} constructor created a nil object") if instance.nil?
                  raise InvalidResourceError.new("#{instance} is already part of the pool") if @used.include? instance
                  instance.instance_variable_set(:@__pool, self)
                  instance.instance_variable_set(:@__allocated_in_pool, Time.now)
                  @used[instance.object_id] = instance
                else
                  # Wait for another thread to release an instance.
                  # If we exhaust the pool and don't release the active instance,
                  # we'll wait here forever, so it's *very* important to always
                  # release your services and *never* exhaust the pool within
                  # a single thread.
                  wait.wait(lock)
                end
              end
            end until instance
            instance
          end