Sha256: da1ac3c54d31089265d9b6b0ba738163bf948082ae6379fca34e521e548b6b03

Contents?: true

Size: 1.07 KB

Versions: 113

Compression:

Stored size: 1.07 KB

Contents

require "set"
require "thread"

module Bunny
  module Concurrent
    # A SortedSet variation that synchronizes key mutation operations.
    #
    # @note This is NOT a complete SortedSet replacement. It only synchronizes operations needed by Bunny.
    # @api public
    class SynchronizedSortedSet < SortedSet
      def initialize(enum = nil)
        @mutex = Mutex.new

        super
      end

      def add(o)
        # avoid using Mutex#synchronize because of a Ruby 1.8.7-specific
        # bug that prevents super from being called from within a block. MK.
        @mutex.lock
        begin
          super
        ensure
          @mutex.unlock
        end
      end

      def delete(o)
        @mutex.lock
        begin
          super
        ensure
          @mutex.unlock
        end
      end

      def delete_if(&block)
        @mutex.lock
        begin
          super
        ensure
          @mutex.unlock
        end
      end

      def include?(o)
        @mutex.lock
        begin
          super
        ensure
          @mutex.unlock
        end
      end
    end
  end
end

Version data entries

113 entries across 113 versions & 2 rubygems

Version Path
bunny-2.12.0 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.12.0.rc1 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.11.0 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.11.0.pre1 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.10.0 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.9.2 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.9.1 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.6.7 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.7.4 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.8.1 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.9.0 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.7.3 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.8.0 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.7.2 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.7.1 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.7.0 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.6.6 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.6.5 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.6.4 lib/bunny/concurrent/synchronized_sorted_set.rb
bunny-2.6.3 lib/bunny/concurrent/synchronized_sorted_set.rb