Sha256: 3995cda2631d90e6a148a4fbbe1b83adefd40f7e7aebadaf349056e026f9f55d

Contents?: true

Size: 824 Bytes

Versions: 1

Compression:

Stored size: 824 Bytes

Contents

module BubbleWrap
  module Reactor
    class ThreadAwareDeferrable < DefaultDeferrable
      include ::BubbleWrap::Reactor::Deferrable

      
      # need to store the the queue in callback / errback
      def callback(&blk)
        return unless blk
        cache_block_queue(&blk)
        super(&blk)
      end

      def errback(&blk)
        return unless blk
        cache_block_queue(&blk)
        super(&blk)
      end

      def execute_block(&blk)
        return unless blk
        queue = @queue_cache.delete(blk.object_id)
        return unless queue
        queue.async do
          blk.call(*@deferred_args)
        end
      end

      def cache_block_queue(&blk)
        return unless blk
        @queue_cache ||= {}
        @queue_cache[blk.object_id] = Dispatch::Queue.current
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bubble-wrap-1.8.0 motion/reactor/thread_aware_deferrable.rb