Sha256: 049942c0f9a670d927ce996b83f36d91cc01f51b25be84518270cc8981b7c698
Contents?: true
Size: 1.52 KB
Versions: 3
Compression:
Stored size: 1.52 KB
Contents
module AMQP module ChannelIdAllocator MAX_CHANNELS_PER_CONNECTION = (2**16) # Resets channel allocator. This method is thread safe. # @api public # @see Channel.next_channel_id # @see Channel.release_channel_id def reset_channel_id_allocator channel_id_mutex.synchronize do int_allocator.reset end end # Releases previously allocated channel id. This method is thread safe. # # @param [Fixnum] Channel id to release # @api public # @see Channel.next_channel_id # @see Channel.reset_channel_id_allocator def release_channel_id(i) channel_id_mutex.synchronize do int_allocator.release(i) end end # Returns next available channel id. This method is thread safe. # # @return [Fixnum] # @api public # @see Channel.release_channel_id # @see Channel.reset_channel_id_allocator def next_channel_id channel_id_mutex.synchronize do result = int_allocator.allocate raise "No further channels available. Please open a new connection." if result < 0 result end end private # @private # @api private def channel_id_mutex @channel_id_mutex ||= Mutex.new end # @private def int_allocator # TODO: ideally, this should be in agreement with agreed max number of channels of the connection, # but it is possible that value either not yet available. MK. @int_allocator ||= IntAllocator.new(1, MAX_CHANNELS_PER_CONNECTION) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
amqp-1.1.8 | lib/amqp/channel_id_allocator.rb |
amqp-1.1.7 | lib/amqp/channel_id_allocator.rb |
amqp-1.1.6 | lib/amqp/channel_id_allocator.rb |