$85 GRAYBYTE WORDPRESS FILE MANAGER $17

SERVER : premium201.web-hosting.com #1 SMP Wed Mar 26 12:08:09 UTC 2025
SERVER IP : 172.67.217.254 | ADMIN IP 216.73.216.157
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/alt/ruby34/share/ruby/

HOME
Current File : /opt/alt/ruby34/share/ruby//timeout.rb
# 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


Current_dir [ NOT WRITEABLE ] Document_root [ NOT WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
1 Jan 1970 12.00 AM
root / root
0
bigdecimal
--
10 Feb 2026 9.34 AM
root / linksafe
0755
cgi
--
10 Feb 2026 9.34 AM
root / linksafe
0755
did_you_mean
--
10 Feb 2026 9.34 AM
root / linksafe
0755
digest
--
10 Feb 2026 9.34 AM
root / linksafe
0755
erb
--
10 Feb 2026 9.34 AM
root / linksafe
0755
error_highlight
--
10 Feb 2026 9.34 AM
root / linksafe
0755
fiddle
--
10 Feb 2026 9.34 AM
root / linksafe
0755
forwardable
--
10 Feb 2026 9.34 AM
root / linksafe
0755
io
--
27 Jan 2026 4.00 PM
root / linksafe
0755
json
--
10 Feb 2026 9.34 AM
root / linksafe
0755
logger
--
10 Feb 2026 9.34 AM
root / root
0755
net
--
10 Feb 2026 9.34 AM
root / linksafe
0755
objspace
--
10 Feb 2026 9.34 AM
root / linksafe
0755
open3
--
10 Feb 2026 9.34 AM
root / linksafe
0755
openssl
--
10 Feb 2026 9.34 AM
root / linksafe
0755
optparse
--
10 Feb 2026 9.34 AM
root / linksafe
0755
prism
--
10 Feb 2026 9.34 AM
root / linksafe
0755
psych
--
10 Feb 2026 9.34 AM
root / linksafe
0755
random
--
10 Feb 2026 9.34 AM
root / linksafe
0755
reline
--
10 Feb 2026 9.34 AM
root / linksafe
0755
ripper
--
10 Feb 2026 9.34 AM
root / linksafe
0755
ruby_vm
--
29 Mar 2025 8.41 AM
root / root
0755
set
--
10 Feb 2026 9.34 AM
root / linksafe
0755
strscan
--
10 Feb 2026 9.34 AM
root / root
0755
syntax_suggest
--
10 Feb 2026 9.34 AM
root / linksafe
0755
unicode_normalize
--
10 Feb 2026 9.34 AM
root / linksafe
0755
uri
--
10 Feb 2026 9.34 AM
root / linksafe
0755
vendor_ruby
--
27 Jan 2026 4.00 PM
root / linksafe
0755
yaml
--
10 Feb 2026 9.34 AM
root / linksafe
0755
English.rb
5.539 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
benchmark.rb
18.664 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
bundled_gems.rb
7.28 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
cgi.rb
9.834 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
coverage.rb
0.359 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
date.rb
1.165 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
delegate.rb
11.676 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
did_you_mean.rb
4.506 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
digest.rb
3.302 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
erb.rb
14.534 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
error_highlight.rb
0.082 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
expect.rb
2.191 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
fiddle.rb
3.672 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
fileutils.rb
78.8 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
find.rb
2.517 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
forwardable.rb
9.028 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
ipaddr.rb
22.399 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
json.rb
19.585 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
logger.rb
22.488 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
mkmf.rb
92.629 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
monitor.rb
6.969 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
objspace.rb
4.137 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
open-uri.rb
28.382 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
open3.rb
47.511 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
openssl.rb
1.059 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
optionparser.rb
0.058 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
optparse.rb
64.175 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
ostruct.rb
14.216 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
pathname.rb
17.199 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
pp.rb
18.356 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
prettyprint.rb
15.928 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
prism.rb
3.029 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
pstore.rb
20.364 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
psych.rb
25.103 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
readline.rb
0.21 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
reline.rb
14.927 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
resolv.rb
87.957 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
ripper.rb
2.436 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
securerandom.rb
2.277 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
set.rb
25.002 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
shellwords.rb
7.528 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
singleton.rb
5.517 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
socket.rb
59.493 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
syntax_suggest.rb
0.072 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
tempfile.rb
20.676 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
time.rb
23.96 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
timeout.rb
5.719 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
tmpdir.rb
5.616 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
tsort.rb
14.286 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
un.rb
11.168 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
uri.rb
3.093 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
weakref.rb
1.355 KB
27 Jan 2026 4.00 PM
root / linksafe
0644
yaml.rb
2.133 KB
27 Jan 2026 4.00 PM
root / linksafe
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025 CONTACT ME
Static GIF