aboutsummaryrefslogtreecommitdiffstats
path: root/lib/timeout.rb
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-12-31 15:02:22 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-12-31 15:02:22 +0000
commita3e1b1ce7ed7e7ffac23015fc2fde56511b30681 (patch)
tree7b725552a9a4ded93849ca2faab1b257f7761790 /lib/timeout.rb
parent3e7566d8fb5138bb9cd647e5fdefc54fc9803509 (diff)
downloadruby-a3e1b1ce7ed7e7ffac23015fc2fde56511b30681.tar.gz
* Merge YARV
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11439 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/timeout.rb')
-rw-r--r--lib/timeout.rb53
1 files changed, 18 insertions, 35 deletions
diff --git a/lib/timeout.rb b/lib/timeout.rb
index dc92964c0b..af201c8ee7 100644
--- a/lib/timeout.rb
+++ b/lib/timeout.rb
@@ -1,52 +1,41 @@
-#--
# = timeout.rb
#
# execution timeout
#
-# = Copyright
-#
-# Copyright:: (C) 2000 Network Applied Communication Laboratory, Inc.
-# Copyright:: (C) 2000 Information-technology Promotion Agency, Japan
+# = Synopsis
#
-#++
+# require 'timeout'
+# status = Timeout::timeout(5) {
+# # Something that should be interrupted if it takes too much time...
+# }
#
# = 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.
+# A way of performing a potentially long-running operation in a thread, and terminating
+# it's execution if it hasn't finished by a fixed amount of time.
#
-# Previous versions of timeout didn't use a module for namespace. This version
+# Previous versions of timeout didn't provide 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...
-# }
+# = 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<Interrupt
+ class Error < Interrupt
end
- ##
# 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().
-
+ # 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, exception=Error)
return yield if sec == nil or sec.zero?
- raise ThreadError, "timeout within critical session" if Thread.critical
begin
x = Thread.current
y = Thread.start {
@@ -54,33 +43,28 @@ module Timeout
x.raise exception, "execution expired" if x.alive?
}
yield sec
- # return true
+ return true
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=Timeout::Error, &block) # :nodoc:
+def timeout(n, e = Timeout::Error, &block)
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:
+TimeoutError = Timeout::Error
if __FILE__ == $0
p timeout(5) {
@@ -102,4 +86,3 @@ if __FILE__ == $0
}
}
end
-