1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/timeout.rb (Timeout.timeout): should return the block value always.

* lib/timeout.rb (Timeout.timeout): should yield sec argument always.
* lib/timeout.rb (Timeout.timeout): fix document.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11995 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
aamine 2007-03-05 00:20:05 +00:00
parent 6dfd5fe953
commit f24e3f2271
2 changed files with 17 additions and 7 deletions

View file

@ -1,3 +1,13 @@
Mon Mar 5 09:19:33 2007 Minero Aoki <aamine@loveruby.net>
* lib/timeout.rb (Timeout.timeout): should return the block value
always.
* lib/timeout.rb (Timeout.timeout): should yield sec argument
always.
* lib/timeout.rb (Timeout.timeout): fix document.
Mon Mar 5 09:16:40 2007 Minero Aoki <aamine@loveruby.net>
* lib/net/smtp.rb: support automatic STARTTLS.

View file

@ -27,23 +27,23 @@ module Timeout
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).
# Executes the method's block. If the block execution terminates before
# +sec+ seconds has passed, it returns the result value of the block.
# 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?
def timeout(sec, exception = Error) #:yield: +sec+
return yield(sec) if sec == nil or sec.zero?
begin
x = Thread.current
y = Thread.start {
sleep sec
x.raise exception, "execution expired" if x.alive?
}
yield sec
return true
return yield(sec)
ensure
y.kill if y and y.alive?
end