PHP 8.2.31
Preview: timeout.rb Size: 3.68 KB
/proc/thread-self/root/opt/alt/ruby23/lib64/ruby/2.3.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
  #
  # 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)   #: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: 75

Name Size Perms Modified Actions
cgi DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
digest DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
drb DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
fiddle DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
io DIR
- drwxr-xr-x 2024-03-03 22:43:23
Edit Download
irb DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
json DIR
- drwxr-xr-x 2024-03-03 22:43:24
Edit Download
matrix DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
net DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
openssl DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
optparse DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
psych DIR
- drwxr-xr-x 2024-03-03 22:43:25
Edit Download
racc DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
rbconfig DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
rdoc DIR
- drwxr-xr-x 2024-03-03 22:43:27
Edit Download
rexml DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
rinda DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
ripper DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
rss DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
rubygems DIR
- drwxr-xr-x 2024-03-03 22:43:28
Edit Download
shell DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
syslog DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
uri DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
webrick DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
- drwxr-xr-x 2024-03-03 22:43:25
Edit Download
xmlrpc DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
yaml DIR
- drwxr-xr-x 2024-03-03 22:43:21
Edit Download
3.49 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
3.31 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
17.90 KB lrw-r--r-- 2015-12-23 03:43:23
Edit Download
9.80 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
9.48 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
82.15 KB lrw-r--r-- 2015-12-19 05:23:50
Edit Download
1011 B lrw-r--r-- 2023-07-26 14:39:32
Edit Download
29.97 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
10.29 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
2.82 KB lrw-r--r-- 2023-07-26 14:39:32
Edit Download
50 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
3.80 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
6.45 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
26.45 KB lrw-r--r-- 2017-06-30 11:24:41
Edit Download
2.17 KB lrw-r--r-- 2023-07-26 14:39:32
Edit Download
1.68 KB lrw-r--r-- 2023-07-26 14:39:32
Edit Download
47.47 KB lrw-r--r-- 2017-03-27 16:57:39
Edit Download
2.51 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
7.97 KB lrw-r--r-- 2018-03-18 15:04:49
Edit Download
15.41 KB lrw-r--r-- 2015-12-23 03:43:23
Edit Download
17.08 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
20.06 KB lrw-r--r-- 2016-03-29 06:10:16
Edit Download
1.77 KB lrw-r--r-- 2023-07-26 14:39:32
Edit Download
5.77 KB lrw-r--r-- 2023-07-26 14:39:32
Edit Download
21.93 KB lrw-r--r-- 2016-10-17 17:38:53
Edit Download
3.87 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
53.37 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
83.79 KB lrw-r--r-- 2023-07-26 14:36:45
Edit Download
7.01 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
2.03 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
5.83 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
24.61 KB lrw-r--r-- 2015-11-11 03:48:45
Edit Download
20.67 KB lrw-r--r-- 2015-11-14 07:43:23
Edit Download
445 B lrw-r--r-- 2023-07-26 14:39:32
Edit Download
59 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
56.91 KB lrw-r--r-- 2017-08-09 07:56:52
Edit Download
9.95 KB lrw-r--r-- 2018-01-31 11:05:38
Edit Download
16.08 KB lrw-r--r-- 2023-07-26 14:39:32
Edit Download
14.20 KB lrw-r--r-- 2015-11-10 11:48:14
Edit Download
15.89 KB lrw-r--r-- 2015-11-10 11:48:14
Edit Download
12.35 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
236 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
4.54 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
14.58 KB lrw-r--r-- 2015-12-23 03:43:23
Edit Download
15.29 KB lrw-r--r-- 2023-07-26 14:39:32
Edit Download
175 B lrw-r--r-- 2023-07-26 14:39:32
Edit Download
5.07 KB lrw-r--r-- 2015-12-22 12:08:13
Edit Download
1.76 KB lrw-r--r-- 2015-11-14 08:25:30
Edit Download
73.52 KB lrw-r--r-- 2018-03-28 06:03:13
Edit Download
2.56 KB lrw-r--r-- 2023-07-26 14:39:32
Edit Download
2.87 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
32.24 KB lrw-r--r-- 2018-02-16 16:21:44
Edit Download
23.56 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
7.49 KB lrw-r--r-- 2016-04-22 15:30:27
Edit Download
19.67 KB lrw-r--r-- 2015-11-16 07:41:30
Edit Download
11.33 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
6.28 KB lrw-r--r-- 2015-12-16 09:25:48
Edit Download
4.05 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
43.49 KB lrw-r--r-- 2023-07-26 14:39:32
Edit Download
7.29 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
10.87 KB lrw-r--r-- 2017-03-27 14:47:38
Edit Download
3.34 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
22.28 KB lrw-r--r-- 2015-11-14 12:45:30
Edit Download
3.68 KB lrw-r--r-- 2015-12-18 15:46:50
Edit Download
4.17 KB lrw-r--r-- 2018-03-28 10:29:15
Edit Download
6.43 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
14.30 KB lrw-r--r-- 2015-11-14 08:46:11
Edit Download
299 B lrw-r--r-- 2015-12-16 05:07:31
Edit Download
8.87 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
3.19 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
3.10 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
2.95 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download
6.72 KB lrw-r--r-- 2015-12-23 03:43:23
Edit Download
8.93 KB lrw-r--r-- 2015-12-23 03:43:23
Edit Download
1.73 KB lrw-r--r-- 2015-12-16 05:07:31
Edit Download

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