Class: MessagePack::Factory::Pool::AbstractPool

Inherits:
Object
  • Object
show all
Defined in:
lib/msgpack/factory.rb,
lib/msgpack/factory.rb

Direct Known Subclasses

PackerPool, UnpackerPool

Instance Method Summary collapse

Constructor Details

#initialize(size, &block) ⇒ AbstractPool

Returns a new instance of AbstractPool.



92
93
94
95
96
# File 'lib/msgpack/factory.rb', line 92

def initialize(size, &block)
  @size = size
  @new_member = block
  @members = []
end

Instance Method Details

#checkin(member) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/msgpack/factory.rb', line 102

def checkin(member)
  # If the pool is already full, we simply drop the extra member.
  # This is because contrary to a connection pool, creating an extra instance
  # is extremely unlikely to cause some kind of resource exhaustion.
  #
  # We could cycle the members (keep the newer one) but first It's more work and second
  # the older member might have been created pre-fork, so it might be at least partially
  # in shared memory.
  if member && @members.size < @size
    member.reset
    @members << member
  end
end

#checkoutObject



98
99
100
# File 'lib/msgpack/factory.rb', line 98

def checkout
  @members.pop || @new_member.call
end