module Concurrent::Utility::NativeExtensionLoader

@!visibility private

Public Instance Methods

allow_c_extensions?() click to toggle source
# File lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb, line 11
def allow_c_extensions?
  Concurrent.on_cruby?
end
c_extensions_loaded?() click to toggle source
# File lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb, line 15
def c_extensions_loaded?
  defined?(@c_extensions_loaded) && @c_extensions_loaded
end
load_native_extensions() click to toggle source
# File lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb, line 19
def load_native_extensions
  if Concurrent.on_cruby? && !c_extensions_loaded?
    ['concurrent/concurrent_ruby_ext',
     "concurrent/#{RUBY_VERSION[0..2]}/concurrent_ruby_ext"
    ].each { |p| try_load_c_extension p }
  end

  if Concurrent.on_jruby? && !java_extensions_loaded?
    begin
      require 'concurrent/concurrent_ruby.jar'
      set_java_extensions_loaded
    rescue LoadError => e
      raise e, "Java extensions are required for JRuby.\n" + e.message, e.backtrace
    end
  end
end

Private Instance Methods

java_extensions_loaded?() click to toggle source
# File lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb, line 50
def java_extensions_loaded?
  defined?(@java_extensions_loaded) && @java_extensions_loaded
end
load_error_path(error) click to toggle source
# File lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb, line 38
def load_error_path(error)
  if error.respond_to? :path
    error.path
  else
    error.message.split(' -- ').last
  end
end
set_c_extensions_loaded() click to toggle source
# File lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb, line 46
def set_c_extensions_loaded
  @c_extensions_loaded = true
end
set_java_extensions_loaded() click to toggle source
# File lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb, line 54
def set_java_extensions_loaded
  @java_extensions_loaded = true
end
try_load_c_extension(path) click to toggle source
# File lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb, line 58
def try_load_c_extension(path)
  require path
  set_c_extensions_loaded
rescue LoadError => e
  if load_error_path(e) == path
    # move on with pure-Ruby implementations
    # TODO (pitr-ch 12-Jul-2018): warning on verbose?
  else
    raise e
  end
end