Sha256: f4afa1b612f5c3aaad00446d8f644147e8801264e872b6c7b765096c73c8a965

Contents?: true

Size: 1.08 KB

Versions: 28

Compression:

Stored size: 1.08 KB

Contents

require "set"
require "thread"

module GorgonBunny
  module Concurrent
    # A SortedSet variation that synchronizes key mutation operations.
    #
    # @note This is NOT a complete SortedSet replacement. It only synchronizes operations needed by GorgonBunny.
    # @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

28 entries across 28 versions & 1 rubygems

Version Path
gorgon-0.11.1 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.11.0 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.10.5 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.10.4 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.10.3 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.10.2 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.10.1 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.10.0 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.9.0 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.8.4 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.8.3 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.8.2 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.8.1 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.8.0 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.7.1 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.7.0 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.7.0.rc4 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.7.0.rc3 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.7.0.rc2 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb
gorgon-0.7.0.rc1 lib/gorgon_bunny/lib/gorgon_bunny/concurrent/synchronized_sorted_set.rb