summaryrefslogtreecommitdiff
path: root/lib/timeout.rb
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-01-24 06:45:50 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-01-24 06:45:50 +0000
commit2ef0c6a1098cf9a237e49eff2542eeea8d0f8440 (patch)
tree86b1f80309a62d1dedb7ab8c839307b886c9ec9a /lib/timeout.rb
parent83b531e3eaeb4ab435c94634ad50b51600c35e53 (diff)
* document updates - [ruby-core:04296], [ruby-core:04301],
[ruby-core:04302], [ruby-core:04307] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7813 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/timeout.rb')
-rw-r--r--lib/timeout.rb52
1 files changed, 31 insertions, 21 deletions
diff --git a/lib/timeout.rb b/lib/timeout.rb
index 0ba5293d1d..734d87f204 100644
--- a/lib/timeout.rb
+++ b/lib/timeout.rb
@@ -1,38 +1,39 @@
+# = timeout.rb
#
-# timeout.rb -- execution timeout
+# execution timeout
#
-# Copyright (C) 2000 Network Applied Communication Laboratory, Inc.
-# Copyright (C) 2000 Information-technology Promotion Agency, Japan
-#
-#= SYNOPSIS
+# = Synopsis
#
# require 'timeout'
-# status = timeout(5) {
-# # something may take time
+# status = Timeout::timeout(5) {
+# # Something that should be interrupted if it takes too much time...
# }
#
-#= DESCRIPTION
-#
-# timeout executes the block. If the block execution terminates successfully
-# before timeout, it returns true. If not, it terminates the execution and
-# raise TimeoutError exception.
-#
-#== Parameters
-#
-# : timout
+# = Description
#
-# The time in seconds to wait for block termination.
+# 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.
#
-# : [exception]
+# Previous versions of timeout didn't provide use a module for namespace. This version
+# provides both Timeout.timeout, and a backwards-compatible #timeout.
#
-# The exception class to be raised on timeout.
+# = Copyright
#
-#=end
+# 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
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().
def timeout(sec, exception=Error)
return yield if sec == nil or sec.zero?
begin
@@ -47,13 +48,22 @@ module Timeout
y.kill if y and y.alive?
end
end
+
module_function :timeout
end
-# compatible
+# 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)
Timeout::timeout(n, e, &block)
end
+
+# Another name for Timeout::Error, defined for backwards compatibility with
+# earlier versions of timeout.rb.
TimeoutError = Timeout::Error
if __FILE__ == $0