Merge pull request #19114 from Homebrew/dependabot/bundler/Library/Homebrew/concurrent-ruby-1.3.5

build(deps): bump concurrent-ruby from 1.3.4 to 1.3.5 in /Library/Homebrew
This commit is contained in:
Patrick Linnane 2025-01-18 05:30:20 +00:00 committed by GitHub
commit 637fd5be9d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
122 changed files with 79 additions and 62 deletions

View File

@ -9,7 +9,7 @@ GEM
bigdecimal (3.1.9) bigdecimal (3.1.9)
bindata (2.5.0) bindata (2.5.0)
coderay (1.1.3) coderay (1.1.3)
concurrent-ruby (1.3.4) concurrent-ruby (1.3.5)
diff-lcs (1.5.1) diff-lcs (1.5.1)
docile (1.4.1) docile (1.4.1)
elftools (1.3.1) elftools (1.3.1)

View File

@ -11,7 +11,6 @@
module Concurrent module Concurrent
extend ::Concurrent::Utility::EngineDetector extend ::Concurrent::Utility::EngineDetector
extend ::Concurrent::Utility::NativeExtensionLoader extend ::Concurrent::Utility::NativeExtensionLoader
extend ::Logger::Severity
extend ::Concurrent::Concern::Logging extend ::Concurrent::Concern::Logging
extend ::Concurrent::Concern::Deprecation extend ::Concurrent::Concern::Deprecation
@ -189,15 +188,17 @@ module Concurrent
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/utility/processor_counter.rb#217 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/utility/processor_counter.rb#217
def cpu_shares; end def cpu_shares; end
# @return [Logger] Logger with provided level and output. # Create a simple logger with provided level and output.
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#37 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#38
def create_simple_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end def create_simple_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end
# @deprecated # Create a stdlib logger with provided level and output.
# @return [Logger] Logger with provided level and output. # If you use this deprecated method you might need to add logger to your Gemfile to avoid warnings from Ruby 3.3.5+.
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#69 # @deprecated
#
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#73
def create_stdlib_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end def create_stdlib_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end
# Dataflow allows you to create a task that will be scheduled when all of its data dependencies are available. # Dataflow allows you to create a task that will be scheduled when all of its data dependencies are available.
@ -269,10 +270,10 @@ module Concurrent
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/configuration.rb#62 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/configuration.rb#62
def global_io_executor; end def global_io_executor; end
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#109 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#114
def global_logger; end def global_logger; end
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#113 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#118
def global_logger=(value); end def global_logger=(value); end
# Global thread pool user for global *timers*. # Global thread pool user for global *timers*.
@ -354,14 +355,14 @@ module Concurrent
# Use logger created by #create_simple_logger to log concurrent-ruby messages. # Use logger created by #create_simple_logger to log concurrent-ruby messages.
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#63 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#66
def use_simple_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end def use_simple_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end
# Use logger created by #create_stdlib_logger to log concurrent-ruby messages. # Use logger created by #create_stdlib_logger to log concurrent-ruby messages.
# #
# @deprecated # @deprecated
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#96 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#101
def use_stdlib_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end def use_stdlib_logger(level = T.unsafe(nil), output = T.unsafe(nil)); end
end end
end end
@ -466,7 +467,6 @@ Concurrent::AbstractExchanger::CANCEL = T.let(T.unsafe(nil), Object)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/abstract_executor_service.rb#10 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/abstract_executor_service.rb#10
class Concurrent::AbstractExecutorService < ::Concurrent::Synchronization::LockableObject class Concurrent::AbstractExecutorService < ::Concurrent::Synchronization::LockableObject
include ::Logger::Severity
include ::Concurrent::Concern::Logging include ::Concurrent::Concern::Logging
include ::Concurrent::ExecutorService include ::Concurrent::ExecutorService
include ::Concurrent::Concern::Deprecation include ::Concurrent::Concern::Deprecation
@ -884,7 +884,7 @@ class Concurrent::Agent < ::Concurrent::Synchronization::LockableObject
# hopelessly deadlock the Agent with no possibility of recovery. # hopelessly deadlock the Agent with no possibility of recovery.
# #
# @param timeout [Float] the maximum number of seconds to wait # @param timeout [Float] the maximum number of seconds to wait
# @raise [Concurrent::TimeoutError] when timout is reached # @raise [Concurrent::TimeoutError] when timeout is reached
# @return [Boolean] true if all actions complete before timeout # @return [Boolean] true if all actions complete before timeout
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/agent.rb#377 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/agent.rb#377
@ -1286,7 +1286,7 @@ class Concurrent::Agent < ::Concurrent::Synchronization::LockableObject
# #
# @param timeout [Float] the maximum number of seconds to wait # @param timeout [Float] the maximum number of seconds to wait
# @param agents [Array<Concurrent::Agent>] the Agents on which to wait # @param agents [Array<Concurrent::Agent>] the Agents on which to wait
# @raise [Concurrent::TimeoutError] when timout is reached # @raise [Concurrent::TimeoutError] when timeout is reached
# @return [Boolean] true if all actions complete before timeout # @return [Boolean] true if all actions complete before timeout
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/agent.rb#482 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/agent.rb#482
@ -3163,9 +3163,7 @@ module Concurrent::Concern; end
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/deprecation.rb#8 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/deprecation.rb#8
module Concurrent::Concern::Deprecation module Concurrent::Concern::Deprecation
include ::Logger::Severity
include ::Concurrent::Concern::Logging include ::Concurrent::Concern::Logging
extend ::Logger::Severity
extend ::Concurrent::Concern::Logging extend ::Concurrent::Concern::Logging
extend ::Concurrent::Concern::Deprecation extend ::Concurrent::Concern::Deprecation
@ -3243,21 +3241,40 @@ end
# Include where logging is needed # Include where logging is needed
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#10 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#9
module Concurrent::Concern::Logging module Concurrent::Concern::Logging
include ::Logger::Severity
# Logs through {Concurrent.global_logger}, it can be overridden by setting @logger # Logs through {Concurrent.global_logger}, it can be overridden by setting @logger
# #
# @param level [Integer] one of Logger::Severity constants # @param level [Integer] one of Concurrent::Concern::Logging constants
# @param progname [String] e.g. a path of an Actor # @param progname [String] e.g. a path of an Actor
# @param message [String, nil] when nil block is used to generate the message # @param message [String, nil] when nil block is used to generate the message
# @yieldreturn [String] a message # @yieldreturn [String] a message
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#18 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#19
def log(level, progname, message = T.unsafe(nil), &block); end def log(level, progname, message = T.unsafe(nil), &block); end
end end
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#11
Concurrent::Concern::Logging::DEBUG = T.let(T.unsafe(nil), Integer)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#11
Concurrent::Concern::Logging::ERROR = T.let(T.unsafe(nil), Integer)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#11
Concurrent::Concern::Logging::FATAL = T.let(T.unsafe(nil), Integer)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#11
Concurrent::Concern::Logging::INFO = T.let(T.unsafe(nil), Integer)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#12
Concurrent::Concern::Logging::SEV_LABEL = T.let(T.unsafe(nil), Array)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#11
Concurrent::Concern::Logging::UNKNOWN = T.let(T.unsafe(nil), Integer)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#11
Concurrent::Concern::Logging::WARN = T.let(T.unsafe(nil), Integer)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/obligation.rb#10 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/obligation.rb#10
module Concurrent::Concern::Obligation module Concurrent::Concern::Obligation
include ::Concurrent::Concern::Dereferenceable include ::Concurrent::Concern::Dereferenceable
@ -3710,7 +3727,7 @@ end
# #
# When a `Delay` is created its state is set to `pending`. The value and # When a `Delay` is created its state is set to `pending`. The value and
# reason are both `nil`. The first time the `#value` method is called the # reason are both `nil`. The first time the `#value` method is called the
# enclosed opration will be run and the calling thread will block. Other # enclosed operation will be run and the calling thread will block. Other
# threads attempting to call `#value` will block as well. Once the operation # threads attempting to call `#value` will block as well. Once the operation
# is complete the *value* will be set to the result of the operation or the # is complete the *value* will be set to the result of the operation or the
# *reason* will be set to the raised exception, as appropriate. All threads # *reason* will be set to the raised exception, as appropriate. All threads
@ -3976,7 +3993,6 @@ Concurrent::ExchangerImplementation = Concurrent::RubyExchanger
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/executor_service.rb#157 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/executor_service.rb#157
module Concurrent::ExecutorService module Concurrent::ExecutorService
include ::Logger::Severity
include ::Concurrent::Concern::Logging include ::Concurrent::Concern::Logging
# Submit a task to the executor for asynchronous processing. # Submit a task to the executor for asynchronous processing.
@ -4281,7 +4297,7 @@ Concurrent::GLOBAL_IMMEDIATE_EXECUTOR = T.let(T.unsafe(nil), Concurrent::Immedia
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/configuration.rb#22 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/configuration.rb#22
Concurrent::GLOBAL_IO_EXECUTOR = T.let(T.unsafe(nil), Concurrent::Delay) Concurrent::GLOBAL_IO_EXECUTOR = T.let(T.unsafe(nil), Concurrent::Delay)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#106 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#111
Concurrent::GLOBAL_LOGGER = T.let(T.unsafe(nil), Concurrent::AtomicReference) Concurrent::GLOBAL_LOGGER = T.let(T.unsafe(nil), Concurrent::AtomicReference)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/configuration.rb#26 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/configuration.rb#26
@ -6043,7 +6059,7 @@ Concurrent::NULL = T.let(T.unsafe(nil), Object)
# Suppresses all output when used for logging. # Suppresses all output when used for logging.
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#103 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/concern/logging.rb#108
Concurrent::NULL_LOGGER = T.let(T.unsafe(nil), Proc) Concurrent::NULL_LOGGER = T.let(T.unsafe(nil), Proc)
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/options.rb#6 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/options.rb#6
@ -6154,7 +6170,7 @@ end
# - if parent is *rejected* the child will be *pending* (but will ultimately be *rejected*) # - if parent is *rejected* the child will be *pending* (but will ultimately be *rejected*)
# #
# Promises are executed asynchronously from the main thread. By the time a # Promises are executed asynchronously from the main thread. By the time a
# child Promise finishes intialization it may be in a different state than its # child Promise finishes initialization it may be in a different state than its
# parent (by the time a child is created its parent may have completed # parent (by the time a child is created its parent may have completed
# execution and changed state). Despite being asynchronous, however, the order # execution and changed state). Despite being asynchronous, however, the order
# of execution of Promise objects in a chain (or tree) is strictly defined. # of execution of Promise objects in a chain (or tree) is strictly defined.
@ -9037,7 +9053,7 @@ class Concurrent::RubyThreadPoolExecutor < ::Concurrent::RubyExecutorService
# #
# This is a no-op on some pool implementation (e.g. the Java one). The Ruby # This is a no-op on some pool implementation (e.g. the Java one). The Ruby
# pool will auto-prune each time a new job is posted. You will need to call # pool will auto-prune each time a new job is posted. You will need to call
# this method explicitely in case your application post jobs in bursts (a # this method explicitly in case your application post jobs in bursts (a
# lot of jobs and then nothing for long periods) # lot of jobs and then nothing for long periods)
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb#118 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb#118
@ -9177,7 +9193,6 @@ Concurrent::RubyThreadPoolExecutor::DEFAULT_THREAD_IDLETIMEOUT = T.let(T.unsafe(
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb#310 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb#310
class Concurrent::RubyThreadPoolExecutor::Worker class Concurrent::RubyThreadPoolExecutor::Worker
include ::Logger::Severity
include ::Concurrent::Concern::Logging include ::Concurrent::Concern::Logging
# @return [Worker] a new instance of Worker # @return [Worker] a new instance of Worker
@ -9410,7 +9425,7 @@ class Concurrent::ScheduledTask < ::Concurrent::IVar
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/scheduled_task.rb#163 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/scheduled_task.rb#163
def executor; end def executor; end
# The `delay` value given at instanciation. # The `delay` value given at instantiation.
# #
# @return [Float] the initial delay. # @return [Float] the initial delay.
# #
@ -9575,7 +9590,6 @@ Concurrent::SemaphoreImplementation = Concurrent::MutexSemaphore
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/serial_executor_service.rb#24 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/serial_executor_service.rb#24
module Concurrent::SerialExecutorService module Concurrent::SerialExecutorService
include ::Logger::Severity
include ::Concurrent::Concern::Logging include ::Concurrent::Concern::Logging
include ::Concurrent::ExecutorService include ::Concurrent::ExecutorService
@ -9594,7 +9608,6 @@ end
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/serialized_execution.rb#8 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/serialized_execution.rb#8
class Concurrent::SerializedExecution < ::Concurrent::Synchronization::LockableObject class Concurrent::SerializedExecution < ::Concurrent::Synchronization::LockableObject
include ::Logger::Severity
include ::Concurrent::Concern::Logging include ::Concurrent::Concern::Logging
# @return [SerializedExecution] a new instance of SerializedExecution # @return [SerializedExecution] a new instance of SerializedExecution
@ -9692,7 +9705,6 @@ end
# #
# source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/serialized_execution_delegator.rb#12 # source://concurrent-ruby//lib/concurrent-ruby/concurrent/executor/serialized_execution_delegator.rb#12
class Concurrent::SerializedExecutionDelegator < ::SimpleDelegator class Concurrent::SerializedExecutionDelegator < ::SimpleDelegator
include ::Logger::Severity
include ::Concurrent::Concern::Logging include ::Concurrent::Concern::Logging
include ::Concurrent::ExecutorService include ::Concurrent::ExecutorService
include ::Concurrent::SerialExecutorService include ::Concurrent::SerialExecutorService
@ -10030,7 +10042,7 @@ end
# is received. This pattern has several issues. The thread itself is highly # is received. This pattern has several issues. The thread itself is highly
# susceptible to errors during processing. Also, the thread itself must be # susceptible to errors during processing. Also, the thread itself must be
# constantly monitored and restarted should it die. `SingleThreadExecutor` # constantly monitored and restarted should it die. `SingleThreadExecutor`
# encapsulates all these bahaviors. The task processor is highly resilient # encapsulates all these behaviors. The task processor is highly resilient
# to errors from within tasks. Also, should the thread die it will # to errors from within tasks. Also, should the thread die it will
# automatically be restarted. # automatically be restarted.
# #
@ -10492,7 +10504,7 @@ class Concurrent::Synchronization::Object < ::Concurrent::Synchronization::Abstr
# Creates methods for reading and writing to a instance variable with # Creates methods for reading and writing to a instance variable with
# volatile (Java) semantic as {.attr_volatile} does. # volatile (Java) semantic as {.attr_volatile} does.
# The instance variable should be accessed oly through generated methods. # The instance variable should be accessed only through generated methods.
# This method generates following methods: `value`, `value=(new_value) #=> new_value`, # This method generates following methods: `value`, `value=(new_value) #=> new_value`,
# `swap_value(new_value) #=> old_value`, # `swap_value(new_value) #=> old_value`,
# `compare_and_set_value(expected, value) #=> true || false`, `update_value(&block)`. # `compare_and_set_value(expected, value) #=> true || false`, `update_value(&block)`.

View File

@ -43,7 +43,7 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/bigdecimal-3.1.9/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/bigdecimal-3.1.9/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/bindata-2.5.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/bindata-2.5.0/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/coderay-1.1.3/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/coderay-1.1.3/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/concurrent-ruby-1.3.4/lib/concurrent-ruby") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/diff-lcs-1.5.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/diff-lcs-1.5.1/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/docile-1.4.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/docile-1.4.1/lib")
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/elftools-1.3.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/elftools-1.3.1/lib")

View File

@ -371,7 +371,7 @@ module Concurrent
# @param [Float] timeout the maximum number of seconds to wait # @param [Float] timeout the maximum number of seconds to wait
# @return [Boolean] true if all actions complete before timeout # @return [Boolean] true if all actions complete before timeout
# #
# @raise [Concurrent::TimeoutError] when timout is reached # @raise [Concurrent::TimeoutError] when timeout is reached
# #
# @!macro agent_await_warning # @!macro agent_await_warning
def await_for!(timeout) def await_for!(timeout)
@ -477,7 +477,7 @@ module Concurrent
# @param [Array<Concurrent::Agent>] agents the Agents on which to wait # @param [Array<Concurrent::Agent>] agents the Agents on which to wait
# @return [Boolean] true if all actions complete before timeout # @return [Boolean] true if all actions complete before timeout
# #
# @raise [Concurrent::TimeoutError] when timout is reached # @raise [Concurrent::TimeoutError] when timeout is reached
# @!macro agent_await_warning # @!macro agent_await_warning
def await_for!(timeout, *agents) def await_for!(timeout, *agents)
raise Concurrent::TimeoutError unless await_for(timeout, *agents) raise Concurrent::TimeoutError unless await_for(timeout, *agents)

View File

@ -218,7 +218,7 @@ module Concurrent
# @!method self.new(*args, &block) # @!method self.new(*args, &block)
# #
# Instanciate a new object and ensure proper initialization of the # Instantiate a new object and ensure proper initialization of the
# synchronization mechanisms. # synchronization mechanisms.
# #
# @param [Array<Object>] args Zero or more arguments to be passed to the # @param [Array<Object>] args Zero or more arguments to be passed to the

View File

@ -113,7 +113,7 @@ module Concurrent
# @option opts [Proc] :validator (nil) Optional proc used to validate new # @option opts [Proc] :validator (nil) Optional proc used to validate new
# values. It must accept one and only one argument which will be the # values. It must accept one and only one argument which will be the
# intended new value. The validator will return true if the new value # intended new value. The validator will return true if the new value
# is acceptable else return false (preferrably) or raise an exception. # is acceptable else return false (preferably) or raise an exception.
# #
# @!macro deref_options # @!macro deref_options
# #

View File

@ -1,4 +1,3 @@
require 'logger'
require 'concurrent/atomic/atomic_reference' require 'concurrent/atomic/atomic_reference'
module Concurrent module Concurrent
@ -8,10 +7,12 @@ module Concurrent
# #
# @!visibility private # @!visibility private
module Logging module Logging
include Logger::Severity # The same as Logger::Severity but we copy it here to avoid a dependency on the logger gem just for these 7 constants
DEBUG, INFO, WARN, ERROR, FATAL, UNKNOWN = 0, 1, 2, 3, 4, 5
SEV_LABEL = %w[DEBUG INFO WARN ERROR FATAL ANY].freeze
# Logs through {Concurrent.global_logger}, it can be overridden by setting @logger # Logs through {Concurrent.global_logger}, it can be overridden by setting @logger
# @param [Integer] level one of Logger::Severity constants # @param [Integer] level one of Concurrent::Concern::Logging constants
# @param [String] progname e.g. a path of an Actor # @param [String] progname e.g. a path of an Actor
# @param [String, nil] message when nil block is used to generate the message # @param [String, nil] message when nil block is used to generate the message
# @yieldreturn [String] a message # @yieldreturn [String] a message
@ -23,7 +24,7 @@ module Concurrent
end end
logger.call level, progname, message, &block logger.call level, progname, message, &block
rescue => error rescue => error
$stderr.puts "`Concurrent.configuration.logger` failed to log #{[level, progname, message, block]}\n" + $stderr.puts "`Concurrent.global_logger` failed to log #{[level, progname, message, block]}\n" +
"#{error.message} (#{error.class})\n#{error.backtrace.join "\n"}" "#{error.message} (#{error.class})\n#{error.backtrace.join "\n"}"
end end
end end
@ -33,8 +34,10 @@ end
module Concurrent module Concurrent
extend Concern::Logging extend Concern::Logging
# @return [Logger] Logger with provided level and output. # Create a simple logger with provided level and output.
def self.create_simple_logger(level = Logger::FATAL, output = $stderr) def self.create_simple_logger(level = :FATAL, output = $stderr)
level = Concern::Logging.const_get(level) unless level.is_a?(Integer)
# TODO (pitr-ch 24-Dec-2016): figure out why it had to be replaced, stdlogger was deadlocking # TODO (pitr-ch 24-Dec-2016): figure out why it had to be replaced, stdlogger was deadlocking
lambda do |severity, progname, message = nil, &block| lambda do |severity, progname, message = nil, &block|
return false if severity < level return false if severity < level
@ -52,7 +55,7 @@ module Concurrent
output.print format "[%s] %5s -- %s: %s\n", output.print format "[%s] %5s -- %s: %s\n",
Time.now.strftime('%Y-%m-%d %H:%M:%S.%L'), Time.now.strftime('%Y-%m-%d %H:%M:%S.%L'),
Logger::SEV_LABEL[severity], Concern::Logging::SEV_LABEL[severity],
progname, progname,
formatted_message formatted_message
true true
@ -60,13 +63,15 @@ module Concurrent
end end
# Use logger created by #create_simple_logger to log concurrent-ruby messages. # Use logger created by #create_simple_logger to log concurrent-ruby messages.
def self.use_simple_logger(level = Logger::FATAL, output = $stderr) def self.use_simple_logger(level = :FATAL, output = $stderr)
Concurrent.global_logger = create_simple_logger level, output Concurrent.global_logger = create_simple_logger level, output
end end
# @return [Logger] Logger with provided level and output. # Create a stdlib logger with provided level and output.
# If you use this deprecated method you might need to add logger to your Gemfile to avoid warnings from Ruby 3.3.5+.
# @deprecated # @deprecated
def self.create_stdlib_logger(level = Logger::FATAL, output = $stderr) def self.create_stdlib_logger(level = :FATAL, output = $stderr)
require 'logger'
logger = Logger.new(output) logger = Logger.new(output)
logger.level = level logger.level = level
logger.formatter = lambda do |severity, datetime, progname, msg| logger.formatter = lambda do |severity, datetime, progname, msg|
@ -93,7 +98,7 @@ module Concurrent
# Use logger created by #create_stdlib_logger to log concurrent-ruby messages. # Use logger created by #create_stdlib_logger to log concurrent-ruby messages.
# @deprecated # @deprecated
def self.use_stdlib_logger(level = Logger::FATAL, output = $stderr) def self.use_stdlib_logger(level = :FATAL, output = $stderr)
Concurrent.global_logger = create_stdlib_logger level, output Concurrent.global_logger = create_stdlib_logger level, output
end end
@ -103,7 +108,7 @@ module Concurrent
NULL_LOGGER = lambda { |level, progname, message = nil, &block| } NULL_LOGGER = lambda { |level, progname, message = nil, &block| }
# @!visibility private # @!visibility private
GLOBAL_LOGGER = AtomicReference.new(create_simple_logger(Logger::WARN)) GLOBAL_LOGGER = AtomicReference.new(create_simple_logger(:WARN))
private_constant :GLOBAL_LOGGER private_constant :GLOBAL_LOGGER
def self.global_logger def self.global_logger

View File

@ -19,7 +19,7 @@ module Concurrent
# #
# When a `Delay` is created its state is set to `pending`. The value and # When a `Delay` is created its state is set to `pending`. The value and
# reason are both `nil`. The first time the `#value` method is called the # reason are both `nil`. The first time the `#value` method is called the
# enclosed opration will be run and the calling thread will block. Other # enclosed operation will be run and the calling thread will block. Other
# threads attempting to call `#value` will block as well. Once the operation # threads attempting to call `#value` will block as well. Once the operation
# is complete the *value* will be set to the result of the operation or the # is complete the *value* will be set to the result of the operation or the
# *reason* will be set to the raised exception, as appropriate. All threads # *reason* will be set to the raised exception, as appropriate. All threads

View File

@ -83,7 +83,7 @@ module Concurrent
# #
# This is a no-op on some pool implementation (e.g. the Java one). The Ruby # This is a no-op on some pool implementation (e.g. the Java one). The Ruby
# pool will auto-prune each time a new job is posted. You will need to call # pool will auto-prune each time a new job is posted. You will need to call
# this method explicitely in case your application post jobs in bursts (a # this method explicitly in case your application post jobs in bursts (a
# lot of jobs and then nothing for long periods) # lot of jobs and then nothing for long periods)
# @!macro thread_pool_executor_public_api # @!macro thread_pool_executor_public_api

View File

@ -27,7 +27,7 @@ module Concurrent
# is received. This pattern has several issues. The thread itself is highly # is received. This pattern has several issues. The thread itself is highly
# susceptible to errors during processing. Also, the thread itself must be # susceptible to errors during processing. Also, the thread itself must be
# constantly monitored and restarted should it die. `SingleThreadExecutor` # constantly monitored and restarted should it die. `SingleThreadExecutor`
# encapsulates all these bahaviors. The task processor is highly resilient # encapsulates all these behaviors. The task processor is highly resilient
# to errors from within tasks. Also, should the thread die it will # to errors from within tasks. Also, should the thread die it will
# automatically be restarted. # automatically be restarted.
# #

View File

@ -148,7 +148,7 @@ module Concurrent
if value = super # non-falsy value is an existing mapping, return it right away if value = super # non-falsy value is an existing mapping, return it right away
value value
# re-check is done with get_or_default(key, NULL) instead of a simple !key?(key) in order to avoid a race condition, whereby by the time the current thread gets to the key?(key) call # re-check is done with get_or_default(key, NULL) instead of a simple !key?(key) in order to avoid a race condition, whereby by the time the current thread gets to the key?(key) call
# a key => value mapping might have already been created by a different thread (key?(key) would then return true, this elsif branch wouldn't be taken and an incorrent +nil+ value # a key => value mapping might have already been created by a different thread (key?(key) would then return true, this elsif branch wouldn't be taken and an incorrect +nil+ value
# would be returned) # would be returned)
# note: nil == value check is not technically necessary # note: nil == value check is not technically necessary
elsif @default_proc && nil == value && NULL == (value = get_or_default(key, NULL)) elsif @default_proc && nil == value && NULL == (value = get_or_default(key, NULL))

View File

@ -103,7 +103,7 @@ module Concurrent
# - if parent is *rejected* the child will be *pending* (but will ultimately be *rejected*) # - if parent is *rejected* the child will be *pending* (but will ultimately be *rejected*)
# #
# Promises are executed asynchronously from the main thread. By the time a # Promises are executed asynchronously from the main thread. By the time a
# child Promise finishes intialization it may be in a different state than its # child Promise finishes initialization it may be in a different state than its
# parent (by the time a child is created its parent may have completed # parent (by the time a child is created its parent may have completed
# execution and changed state). Despite being asynchronous, however, the order # execution and changed state). Despite being asynchronous, however, the order
# of execution of Promise objects in a chain (or tree) is strictly defined. # of execution of Promise objects in a chain (or tree) is strictly defined.

View File

@ -193,7 +193,7 @@ module Concurrent
end end
end end
# The `delay` value given at instanciation. # The `delay` value given at instantiation.
# #
# @return [Float] the initial delay. # @return [Float] the initial delay.
def initial_delay def initial_delay

View File

@ -157,7 +157,7 @@ module Concurrent
end end
end end
members.each_with_index do |member, index| members.each_with_index do |member, index|
clazz.send :remove_method, member if clazz.instance_methods.include? member clazz.send :remove_method, member if clazz.instance_methods(false).include? member
clazz.send(:define_method, member) do clazz.send(:define_method, member) do
@values[index] @values[index]
end end

Some files were not shown because too many files have changed in this diff Show More