module Concurrent::Utility::NativeExtensionLoader

@!visibility private

Public Instance Methods

allow_c_extensions?() click to toggle source
# File lib/concurrent/utility/native_extension_loader.rb, line 10
def allow_c_extensions?
  Concurrent.on_cruby?
end
c_extensions_loaded?() click to toggle source
# File lib/concurrent/utility/native_extension_loader.rb, line 14
def c_extensions_loaded?
  @c_extensions_loaded ||= false
end
java_extensions_loaded?() click to toggle source
# File lib/concurrent/utility/native_extension_loader.rb, line 18
def java_extensions_loaded?
  @java_extensions_loaded ||= false
end
load_native_extensions() click to toggle source
# File lib/concurrent/utility/native_extension_loader.rb, line 30
def load_native_extensions
  unless defined? Synchronization::AbstractObject
    raise 'native_extension_loader loaded before Synchronization::AbstractObject'
  end

  if Concurrent.on_cruby? && !c_extensions_loaded?
    tries = [
      lambda do
        require 'concurrent/extension'
        set_c_extensions_loaded
      end,
      lambda do
        # may be a Windows cross-compiled native gem
        require "concurrent/#{RUBY_VERSION[0..2]}/extension"
        set_c_extensions_loaded
      end]

    tries.each do |try|
      begin
        try.call
        break
      rescue LoadError
        next
      end
    end
  end

  if Concurrent.on_jruby? && !java_extensions_loaded?
    begin
      require 'concurrent_ruby_ext'
      set_java_extensions_loaded
    rescue LoadError
      # move on with pure-Ruby implementations
      raise 'On JRuby but Java extensions failed to load.'
    end
  end
end
set_c_extensions_loaded() click to toggle source
# File lib/concurrent/utility/native_extension_loader.rb, line 22
def set_c_extensions_loaded
  @c_extensions_loaded = true
end
set_java_extensions_loaded() click to toggle source
# File lib/concurrent/utility/native_extension_loader.rb, line 26
def set_java_extensions_loaded
  @java_extensions_loaded = true
end