diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-07 07:38:25 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-07 07:38:25 +0000 |
commit | 9ff1e787f915539b1980654e3d3d2013ff5c81d2 (patch) | |
tree | 8d0fc9ca5b4dbfa9885dc56862292d55091bcaac /ruby_1_8_6/lib/timeout.rb | |
parent | 441546edcfbb1b346c87b69c5f578d1a0e522e06 (diff) |
wrong commit; sorryv1_8_6_269
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_6_269@17938 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby_1_8_6/lib/timeout.rb')
-rw-r--r-- | ruby_1_8_6/lib/timeout.rb | 122 |
1 files changed, 0 insertions, 122 deletions
diff --git a/ruby_1_8_6/lib/timeout.rb b/ruby_1_8_6/lib/timeout.rb deleted file mode 100644 index 5a99c28092..0000000000 --- a/ruby_1_8_6/lib/timeout.rb +++ /dev/null @@ -1,122 +0,0 @@ -#-- -# = timeout.rb -# -# execution timeout -# -# = Copyright -# -# Copyright:: (C) 2000 Network Applied Communication Laboratory, Inc. -# Copyright:: (C) 2000 Information-technology Promotion Agency, Japan -# -#++ -# -# = Description -# -# A way of performing a potentially long-running operation in a thread, and -# terminating it's execution if it hasn't finished within fixed amount of -# time. -# -# Previous versions of timeout didn't use a module for namespace. This version -# provides both Timeout.timeout, and a backwards-compatible #timeout. -# -# = Synopsis -# -# require 'timeout' -# status = Timeout::timeout(5) { -# # Something that should be interrupted if it takes too much time... -# } -# - -module Timeout - - ## - # Raised by Timeout#timeout when the block times out. - - class Error < Interrupt - end - class ExitException < ::Exception # :nodoc: - end - - THIS_FILE = /\A#{Regexp.quote(__FILE__)}:/o - CALLER_OFFSET = ((c = caller[0]) && THIS_FILE =~ c) ? 1 : 0 - - ## - # Executes the method's block. If the block execution terminates before +sec+ - # seconds has passed, it returns true. If not, it terminates the execution - # and raises +exception+ (which defaults to Timeout::Error). - # - # Note that this is both a method of module Timeout, so you can 'include - # Timeout' 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) - return yield if sec == nil or sec.zero? - raise ThreadError, "timeout within critical session" if Thread.critical - exception = klass || Class.new(ExitException) - begin - x = Thread.current - y = Thread.start { - sleep sec - x.raise exception, "execution expired" if x.alive? - } - yield sec - # return true - rescue exception => e - rej = /\A#{Regexp.quote(__FILE__)}:#{__LINE__-4}\z/o - (bt = e.backtrace).reject! {|m| rej =~ m} - level = -caller(CALLER_OFFSET).size - while THIS_FILE =~ bt[level] - bt.delete_at(level) - level += 1 - end - raise if klass # if exception class is specified, it - # would be expected outside. - raise Error, e.message, e.backtrace - ensure - y.kill if y and y.alive? - end - end - - module_function :timeout - -end - -## -# Identical to: -# -# Timeout::timeout(n, e, &block). -# -# Defined for backwards compatibility with earlier versions of timeout.rb, see -# Timeout#timeout. - -def timeout(n, e = nil, &block) # :nodoc: - Timeout::timeout(n, e, &block) -end - -## -# Another name for Timeout::Error, defined for backwards compatibility with -# earlier versions of timeout.rb. - -TimeoutError = Timeout::Error # :nodoc: - -if __FILE__ == $0 - p timeout(5) { - 45 - } - p timeout(5, TimeoutError) { - 45 - } - p timeout(nil) { - 54 - } - p timeout(0) { - 54 - } - p timeout(5) { - loop { - p 10 - sleep 1 - } - } -end - |