Sha256: ffc3736052e661cf8fd72fd63fb0b82120f950e7c0cd5ff9189c898f489ee3f7

Contents?: true

Size: 908 Bytes

Versions: 48

Compression:

Stored size: 908 Bytes

Contents

# frozen_string_literal: true

require "monitor"

module ActiveSupport
  module Concurrency
    # A monitor that will permit dependency loading while blocked waiting for
    # the lock.
    class LoadInterlockAwareMonitor < Monitor
      EXCEPTION_NEVER = { Exception => :never }.freeze
      EXCEPTION_IMMEDIATE = { Exception => :immediate }.freeze
      private_constant :EXCEPTION_NEVER, :EXCEPTION_IMMEDIATE

      # Enters an exclusive section, but allows dependency loading while blocked
      def mon_enter
        mon_try_enter ||
          ActiveSupport::Dependencies.interlock.permit_concurrent_loads { super }
      end

      def synchronize(&block)
        Thread.handle_interrupt(EXCEPTION_NEVER) do
          mon_enter

          begin
            Thread.handle_interrupt(EXCEPTION_IMMEDIATE, &block)
          ensure
            mon_exit
          end
        end
      end
    end
  end
end

Version data entries

48 entries across 45 versions & 9 rubygems

Version Path
trusty-cms-7.0.9.1 vendor/bundle/ruby/3.3.0/gems/activesupport-7.0.8.7/lib/active_support/concurrency/load_interlock_aware_monitor.rb
activesupport-7.0.8.7 lib/active_support/concurrency/load_interlock_aware_monitor.rb
activesupport-7.0.8.6 lib/active_support/concurrency/load_interlock_aware_monitor.rb
activesupport-7.0.8.5 lib/active_support/concurrency/load_interlock_aware_monitor.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.8.4/lib/active_support/concurrency/load_interlock_aware_monitor.rb
cm-admin-1.5.22 vendor/bundle/ruby/3.3.0/gems/activesupport-7.0.5.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb
cm-admin-1.5.21 vendor/bundle/ruby/3.3.0/gems/activesupport-7.0.5.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb
cm-admin-1.5.20 vendor/bundle/ruby/3.3.0/gems/activesupport-7.0.5.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb
activesupport-7.0.8.4 lib/active_support/concurrency/load_interlock_aware_monitor.rb
activesupport-7.0.8.1 lib/active_support/concurrency/load_interlock_aware_monitor.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/activesupport-7.0.2.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb
activesupport-7.0.8 lib/active_support/concurrency/load_interlock_aware_monitor.rb
activesupport-7.0.7.2 lib/active_support/concurrency/load_interlock_aware_monitor.rb
activesupport-7.0.7.1 lib/active_support/concurrency/load_interlock_aware_monitor.rb
activesupport-7.0.7 lib/active_support/concurrency/load_interlock_aware_monitor.rb
mlh-rubocop-config-1.0.2 vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.6/lib/active_support/concurrency/load_interlock_aware_monitor.rb
fablicop-1.10.3 vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.5/lib/active_support/concurrency/load_interlock_aware_monitor.rb
fablicop-1.10.3 vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.6/lib/active_support/concurrency/load_interlock_aware_monitor.rb
activesupport-7.0.6 lib/active_support/concurrency/load_interlock_aware_monitor.rb