Current Path: > > opt > alt > > ruby34 > share > ruby
Operation : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 162.0.232.56 | Your IP: 216.73.216.111 Domains : 1034 Domain(s) Permission : [ 0755 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
bigdecimal | Directory | - | - | |
cgi | Directory | - | - | |
did_you_mean | Directory | - | - | |
digest | Directory | - | - | |
erb | Directory | - | - | |
error_highlight | Directory | - | - | |
fiddle | Directory | - | - | |
forwardable | Directory | - | - | |
io | Directory | - | - | |
json | Directory | - | - | |
logger | Directory | - | - | |
net | Directory | - | - | |
objspace | Directory | - | - | |
open3 | Directory | - | - | |
openssl | Directory | - | - | |
optparse | Directory | - | - | |
prism | Directory | - | - | |
psych | Directory | - | - | |
random | Directory | - | - | |
reline | Directory | - | - | |
ripper | Directory | - | - | |
ruby_vm | Directory | - | - | |
set | Directory | - | - | |
strscan | Directory | - | - | |
syntax_suggest | Directory | - | - | |
unicode_normalize | Directory | - | - | |
uri | Directory | - | - | |
vendor_ruby | Directory | - | - | |
yaml | Directory | - | - | |
English.rb | File | 5672 bytes | May 29 2025 13:39:42. | |
benchmark.rb | File | 19112 bytes | May 29 2025 13:39:42. | |
bundled_gems.rb | File | 7455 bytes | May 29 2025 13:39:41. | |
cgi.rb | File | 10070 bytes | May 29 2025 13:39:42. | |
coverage.rb | File | 368 bytes | May 29 2025 13:39:42. | |
date.rb | File | 1193 bytes | May 29 2025 13:39:41. | |
delegate.rb | File | 11956 bytes | May 29 2025 13:39:39. | |
did_you_mean.rb | File | 4614 bytes | May 29 2025 13:39:39. | |
digest.rb | File | 3381 bytes | May 29 2025 13:39:42. | |
erb.rb | File | 14883 bytes | May 29 2025 13:39:41. | |
error_highlight.rb | File | 84 bytes | May 29 2025 13:39:42. | |
expect.rb | File | 2244 bytes | May 29 2025 13:39:39. | |
fiddle.rb | File | 3760 bytes | May 29 2025 13:39:42. | |
fileutils.rb | File | 80691 bytes | May 29 2025 13:39:39. | |
find.rb | File | 2577 bytes | May 29 2025 13:39:42. | |
forwardable.rb | File | 9245 bytes | May 29 2025 13:39:39. | |
ipaddr.rb | File | 22937 bytes | May 29 2025 13:39:39. | |
json.rb | File | 20055 bytes | May 29 2025 13:39:41. | |
logger.rb | File | 23028 bytes | May 29 2025 13:39:42. | |
mkmf.rb | File | 94852 bytes | May 29 2025 13:39:42. | |
monitor.rb | File | 7136 bytes | May 29 2025 13:39:39. | |
objspace.rb | File | 4236 bytes | May 29 2025 13:39:41. | |
open-uri.rb | File | 29063 bytes | May 29 2025 13:39:42. | |
open3.rb | File | 48651 bytes | May 29 2025 13:39:41. | |
openssl.rb | File | 1084 bytes | May 29 2025 13:39:41. | |
optionparser.rb | File | 59 bytes | May 29 2025 13:39:42. | |
optparse.rb | File | 65715 bytes | May 29 2025 13:39:39. | |
ostruct.rb | File | 14557 bytes | May 29 2025 13:39:39. | |
pathname.rb | File | 17612 bytes | May 29 2025 13:39:41. | |
pp.rb | File | 18797 bytes | May 29 2025 13:39:41. | |
prettyprint.rb | File | 16310 bytes | May 29 2025 13:39:41. | |
prism.rb | File | 3005 bytes | May 29 2025 13:39:42. | |
pstore.rb | File | 20853 bytes | May 29 2025 13:39:42. | |
psych.rb | File | 25705 bytes | May 29 2025 13:39:39. | |
readline.rb | File | 215 bytes | May 29 2025 13:39:42. | |
reline.rb | File | 15285 bytes | May 29 2025 13:39:41. | |
resolv.rb | File | 88963 bytes | May 29 2025 13:39:41. | |
ripper.rb | File | 2494 bytes | May 29 2025 13:39:42. | |
securerandom.rb | File | 2332 bytes | May 29 2025 13:39:39. | |
set.rb | File | 25602 bytes | May 29 2025 13:39:42. | |
shellwords.rb | File | 7709 bytes | May 29 2025 13:39:42. | |
singleton.rb | File | 5649 bytes | May 29 2025 13:39:41. | |
socket.rb | File | 60921 bytes | May 29 2025 13:39:41. | |
syntax_suggest.rb | File | 74 bytes | May 29 2025 13:39:42. | |
tempfile.rb | File | 21172 bytes | May 29 2025 13:39:42. | |
time.rb | File | 24535 bytes | May 29 2025 13:39:41. | |
timeout.rb | File | 5856 bytes | May 29 2025 13:39:42. | |
tmpdir.rb | File | 5751 bytes | May 29 2025 13:39:42. | |
tsort.rb | File | 14629 bytes | May 29 2025 13:39:42. | |
un.rb | File | 11436 bytes | May 29 2025 13:39:42. | |
uri.rb | File | 3167 bytes | May 29 2025 13:39:41. | |
weakref.rb | File | 1388 bytes | May 29 2025 13:39:41. | |
yaml.rb | File | 2184 bytes | May 29 2025 13:39:41. |
# frozen_string_literal: true # Timeout long-running blocks # # == Synopsis # # require 'timeout' # status = Timeout.timeout(5) { # # Something that should be interrupted if it takes more than 5 seconds... # } # # == Description # # Timeout provides a way to auto-terminate a potentially long-running # operation if it hasn't finished in a fixed amount of time. # # == Copyright # # Copyright:: (C) 2000 Network Applied Communication Laboratory, Inc. # Copyright:: (C) 2000 Information-technology Promotion Agency, Japan module Timeout # The version VERSION = "0.4.3" # Internal error raised to when a timeout is triggered. class ExitException < Exception def exception(*) # :nodoc: self end end # Raised by Timeout.timeout when the block times out. class Error < RuntimeError def self.handle_timeout(message) # :nodoc: exc = ExitException.new(message) begin yield exc rescue ExitException => e raise new(message) if exc.equal?(e) raise end end end # :stopdoc: CONDVAR = ConditionVariable.new QUEUE = Queue.new QUEUE_MUTEX = Mutex.new TIMEOUT_THREAD_MUTEX = Mutex.new @timeout_thread = nil private_constant :CONDVAR, :QUEUE, :QUEUE_MUTEX, :TIMEOUT_THREAD_MUTEX class Request attr_reader :deadline def initialize(thread, timeout, exception_class, message) @thread = thread @deadline = GET_TIME.call(Process::CLOCK_MONOTONIC) + timeout @exception_class = exception_class @message = message @mutex = Mutex.new @done = false # protected by @mutex end def done? @mutex.synchronize do @done end end def expired?(now) now >= @deadline end def interrupt @mutex.synchronize do unless @done @thread.raise @exception_class, @message @done = true end end end def finished @mutex.synchronize do @done = true end end end private_constant :Request def self.create_timeout_thread watcher = Thread.new do requests = [] while true until QUEUE.empty? and !requests.empty? # wait to have at least one request req = QUEUE.pop requests << req unless req.done? end closest_deadline = requests.min_by(&:deadline).deadline now = 0.0 QUEUE_MUTEX.synchronize do while (now = GET_TIME.call(Process::CLOCK_MONOTONIC)) < closest_deadline and QUEUE.empty? CONDVAR.wait(QUEUE_MUTEX, closest_deadline - now) end end requests.each do |req| req.interrupt if req.expired?(now) end requests.reject!(&:done?) end end ThreadGroup::Default.add(watcher) unless watcher.group.enclosed? watcher.name = "Timeout stdlib thread" watcher.thread_variable_set(:"\0__detached_thread__", true) watcher end private_class_method :create_timeout_thread def self.ensure_timeout_thread_created unless @timeout_thread and @timeout_thread.alive? TIMEOUT_THREAD_MUTEX.synchronize do unless @timeout_thread and @timeout_thread.alive? @timeout_thread = create_timeout_thread end end end end # We keep a private reference so that time mocking libraries won't break # Timeout. GET_TIME = Process.method(:clock_gettime) private_constant :GET_TIME # :startdoc: # Perform an operation in a block, raising an error if it takes longer than # +sec+ seconds to complete. # # +sec+:: Number of seconds to wait for the block to terminate. Any non-negative number # or nil may be used, including Floats to specify fractional seconds. A # value of 0 or +nil+ will execute the block without any timeout. # Any negative number will raise an ArgumentError. # +klass+:: Exception Class to raise if the block fails to terminate # in +sec+ seconds. Omitting will use the default, Timeout::Error # +message+:: Error message to raise with Exception Class. # Omitting will use the default, "execution expired" # # Returns the result of the block *if* the block completed before # +sec+ seconds, otherwise throws an exception, based on the value of +klass+. # # The exception thrown to terminate the given block cannot be rescued inside # the block unless +klass+ is given explicitly. However, the block can use # ensure to prevent the handling of the exception. For that reason, this # method cannot be relied on to enforce timeouts for untrusted blocks. # # If a scheduler is defined, it will be used to handle the timeout by invoking # Scheduler#timeout_after. # # Note that this is both a method of module Timeout, so you can <tt>include # Timeout</tt> into your classes so they have a #timeout method, as well as # a module method, so you can call it directly as Timeout.timeout(). def timeout(sec, klass = nil, message = nil, &block) #:yield: +sec+ return yield(sec) if sec == nil or sec.zero? raise ArgumentError, "Timeout sec must be a non-negative number" if 0 > sec message ||= "execution expired" if Fiber.respond_to?(:current_scheduler) && (scheduler = Fiber.current_scheduler)&.respond_to?(:timeout_after) return scheduler.timeout_after(sec, klass || Error, message, &block) end Timeout.ensure_timeout_thread_created perform = Proc.new do |exc| request = Request.new(Thread.current, sec, exc, message) QUEUE_MUTEX.synchronize do QUEUE << request CONDVAR.signal end begin return yield(sec) ensure request.finished end end if klass perform.call(klass) else Error.handle_timeout(message, &perform) end end module_function :timeout end
SILENT KILLER Tool