PATH:
opt
/
alt
/
ruby26
/
lib64
/
ruby
/
2.6.0
/
bundler
# frozen_string_literal: true require "thread" module Bundler class Worker POISON = Object.new class WrappedException < StandardError attr_reader :exception def initialize(exn) @exception = exn end end # @return [String] the name of the worker attr_reader :name # Creates a worker pool of specified size # # @param size [Integer] Size of pool # @param name [String] name the name of the worker # @param func [Proc] job to run in inside the worker pool def initialize(size, name, func) @name = name @request_queue = Queue.new @response_queue = Queue.new @func = func @size = size @threads = nil SharedHelpers.trap("INT") { abort_threads } end # Enqueue a request to be executed in the worker pool # # @param obj [String] mostly it is name of spec that should be downloaded def enq(obj) create_threads unless @threads @request_queue.enq obj end # Retrieves results of job function being executed in worker pool def deq result = @response_queue.deq raise result.exception if result.is_a?(WrappedException) result end def stop stop_threads end private def process_queue(i) loop do obj = @request_queue.deq break if obj.equal? POISON @response_queue.enq apply_func(obj, i) end end def apply_func(obj, i) @func.call(obj, i) rescue Exception => e WrappedException.new(e) end # Stop the worker threads by sending a poison object down the request queue # so as worker threads after retrieving it, shut themselves down def stop_threads return unless @threads @threads.each { @request_queue.enq POISON } @threads.each(&:join) @threads = nil end def abort_threads return unless @threads Bundler.ui.debug("\n#{caller.join("\n")}") @threads.each(&:exit) exit 1 end def create_threads creation_errors = [] @threads = Array.new(@size) do |i| begin Thread.start { process_queue(i) }.tap do |thread| thread.name = "#{name} Worker ##{i}" if thread.respond_to?(:name=) end rescue ThreadError => e creation_errors << e nil end end.compact return if creation_errors.empty? message = "Failed to create threads for the #{name} worker: #{creation_errors.map(&:to_s).uniq.join(", ")}" raise ThreadCreationError, message if @threads.empty? Bundler.ui.info message end end end
[-] vendored_fileutils.rb
[edit]
[+]
settings
[-] similarity_detector.rb
[edit]
[-] mirror.rb
[edit]
[+]
resolver
[+]
plugin
[+]
fetcher
[-] lockfile_parser.rb
[edit]
[-] definition.rb
[edit]
[-] rubygems_integration.rb
[edit]
[-] source.rb
[edit]
[-] feature_flag.rb
[edit]
[-] index.rb
[edit]
[-] vlad.rb
[edit]
[-] compact_index_client.rb
[edit]
[+]
source
[-] spec_set.rb
[edit]
[-] env.rb
[edit]
[-] process_lock.rb
[edit]
[-] version.rb
[edit]
[-] fetcher.rb
[edit]
[+]
ui
[-] ruby_version.rb
[edit]
[-] ruby_dsl.rb
[edit]
[-] rubygems_ext.rb
[edit]
[-] version_ranges.rb
[edit]
[-] psyched_yaml.rb
[edit]
[+]
installer
[-] lockfile_generator.rb
[edit]
[-] remote_specification.rb
[edit]
[-] gem_tasks.rb
[edit]
[+]
templates
[+]
cli
[-] runtime.rb
[edit]
[-] installer.rb
[edit]
[+]
vendor
[-] shared_helpers.rb
[edit]
[+]
compact_index_client
[-] worker.rb
[edit]
[-] graph.rb
[edit]
[-] gem_helper.rb
[edit]
[-] vendored_persistent.rb
[edit]
[-] source_list.rb
[edit]
[-] settings.rb
[edit]
[-] setup.rb
[edit]
[+]
..
[-] environment_preserver.rb
[edit]
[-] match_platform.rb
[edit]
[-] yaml_serializer.rb
[edit]
[-] constants.rb
[edit]
[-] plugin.rb
[edit]
[-] retry.rb
[edit]
[-] gemdeps.rb
[edit]
[-] injector.rb
[edit]
[-] endpoint_specification.rb
[edit]
[+]
ssl_certs
[-] vendored_thor.rb
[edit]
[-] errors.rb
[edit]
[-] compatibility_guard.rb
[edit]
[-] stub_specification.rb
[edit]
[-] ui.rb
[edit]
[-] dependency.rb
[edit]
[-] capistrano.rb
[edit]
[-] uri_credentials_filter.rb
[edit]
[-] deprecate.rb
[edit]
[-] gem_helpers.rb
[edit]
[-] vendored_molinillo.rb
[edit]
[-] dsl.rb
[edit]
[-] deployment.rb
[edit]
[-] current_ruby.rb
[edit]
[-] gem_version_promoter.rb
[edit]
[-] cli.rb
[edit]
[-] gem_remote_fetcher.rb
[edit]
[-] resolver.rb
[edit]
[-] lazy_specification.rb
[edit]
[-] build_metadata.rb
[edit]
[-] dep_proxy.rb
[edit]
[-] inline.rb
[edit]
[-] rubygems_gem_installer.rb
[edit]
[-] friendly_errors.rb
[edit]