PHP 8.2.31
Preview: timeout.rb Size: 3.83 KB
/proc/thread-self/root/opt/alt/ruby24/lib64/ruby/2.4.0/timeout.rb

# frozen_string_literal: false
# 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.
#
# Previous versions didn't use a module for namespacing, however
# #timeout is provided for backwards compatibility.  You
# should prefer Timeout#timeout instead.
#
# == Copyright
#
# Copyright:: (C) 2000  Network Applied Communication Laboratory, Inc.
# Copyright:: (C) 2000  Information-technology Promotion Agency, Japan

module Timeout
  # Raised by Timeout#timeout when the block times out.
  class Error < RuntimeError
    attr_reader :thread

    def self.catch(*args)
      exc = new(*args)
      exc.instance_variable_set(:@thread, Thread.current)
      ::Kernel.catch(exc) {yield exc}
    end

    def exception(*)
      # TODO: use Fiber.current to see if self can be thrown
      if self.thread == Thread.current
        bt = caller
        begin
          throw(self, bt)
        rescue UncaughtThrowError
        end
      end
      self
    end
  end

  # :stopdoc:
  THIS_FILE = /\A#{Regexp.quote(__FILE__)}:/o
  CALLER_OFFSET = ((c = caller[0]) && THIS_FILE =~ c) ? 1 : 0
  private_constant :THIS_FILE, :CALLER_OFFSET
  # :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 number
  #         may be used, including Floats to specify fractional seconds. A
  #         value of 0 or +nil+ will execute the block without any timeout.
  # +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.
  #
  # 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)   #:yield: +sec+
    return yield(sec) if sec == nil or sec.zero?
    message ||= "execution expired".freeze
    from = "from #{caller_locations(1, 1)[0]}" if $DEBUG
    e = Error
    bl = proc do |exception|
      begin
        x = Thread.current
        y = Thread.start {
          Thread.current.name = from
          begin
            sleep sec
          rescue => e
            x.raise e
          else
            x.raise exception, message
          end
        }
        return yield(sec)
      ensure
        if y
          y.kill
          y.join # make sure y is dead.
        end
      end
    end
    if klass
      begin
        bl.call(klass)
      rescue klass => e
        bt = e.backtrace
      end
    else
      bt = Error.catch(message, &bl)
    end
    level = -caller(CALLER_OFFSET).size-2
    while THIS_FILE =~ bt[level]
      bt.delete_at(level)
    end
    raise(e, message, bt)
  end

  module_function :timeout
end

def timeout(*args, &block)
  warn "#{caller_locations(1, 1)[0]}: Object##{__method__} is deprecated, use Timeout.timeout instead."
  Timeout.timeout(*args, &block)
end

# Another name for Timeout::Error, defined for backwards compatibility with
# earlier versions of timeout.rb.
TimeoutError = Timeout::Error
class Object
  deprecate_constant :TimeoutError
end

Directory Contents

Dirs: 28 × Files: 73

Name Size Perms Modified Actions
cgi DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
digest DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
drb DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
fiddle DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
io DIR
- drwxr-xr-x 2024-03-03 22:47:59
Edit Download
irb DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
json DIR
- drwxr-xr-x 2024-03-03 22:47:59
Edit Download
matrix DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
net DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
openssl DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
optparse DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
psych DIR
- drwxr-xr-x 2024-03-03 22:48:00
Edit Download
racc DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
rbconfig DIR
- drwxr-xr-x 2024-03-03 22:48:02
Edit Download
rdoc DIR
- drwxr-xr-x 2024-03-03 22:48:01
Edit Download
rexml DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
rinda DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
ripper DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
rss DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
rubygems DIR
- drwxr-xr-x 2024-03-03 22:48:02
Edit Download
shell DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
syslog DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
uri DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
webrick DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
- drwxr-xr-x 2024-03-03 22:48:00
Edit Download
yaml DIR
- drwxr-xr-x 2024-03-03 22:47:57
Edit Download
3.49 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
3.31 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
17.90 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
9.80 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
9.48 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
83.53 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
1004 B lrw-r--r-- 2023-07-26 14:47:32
Edit Download
29.98 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
10.31 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
2.83 KB lrw-r--r-- 2023-07-26 14:47:33
Edit Download
50 B lrw-r--r-- 2020-03-31 11:42:18
Edit Download
3.94 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
6.45 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
27.25 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
2.17 KB lrw-r--r-- 2023-07-26 14:47:48
Edit Download
1.68 KB lrw-r--r-- 2023-07-26 14:47:35
Edit Download
44.06 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
2.52 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
8.50 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
15.41 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
17.10 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
20.29 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
1.77 KB lrw-r--r-- 2023-07-26 14:47:36
Edit Download
5.77 KB lrw-r--r-- 2023-07-26 14:47:38
Edit Download
23.53 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
3.42 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
53.37 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
84.32 KB lrw-r--r-- 2023-07-26 14:46:03
Edit Download
7.02 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
2.04 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
5.83 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
24.76 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
20.59 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
445 B lrw-r--r-- 2023-07-26 14:47:47
Edit Download
59 B lrw-r--r-- 2020-03-31 11:42:18
Edit Download
57.25 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
10.20 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
16.08 KB lrw-r--r-- 2023-07-26 14:47:47
Edit Download
14.43 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
15.89 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
12.49 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
236 B lrw-r--r-- 2020-03-31 11:42:18
Edit Download
4.54 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
14.71 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
15.25 KB lrw-r--r-- 2023-07-26 14:47:48
Edit Download
5.07 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
1.76 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
73.48 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
2.56 KB lrw-r--r-- 2023-07-26 14:47:52
Edit Download
2.87 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
35.38 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
23.56 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
7.48 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
20.74 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
11.37 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
6.66 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
4.06 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
42.99 KB lrw-r--r-- 2023-07-26 14:47:56
Edit Download
7.29 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
10.80 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
3.35 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
22.36 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
3.83 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
4.29 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
6.44 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
14.30 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
298 B lrw-r--r-- 2020-03-31 11:42:18
Edit Download
9.18 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
3.20 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
3.10 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
2.95 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
6.72 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download
1.73 KB lrw-r--r-- 2020-03-31 11:42:18
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).