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:
parent
6dfd5fe953
commit
f24e3f2271
2 changed files with 17 additions and 7 deletions
10
ChangeLog
10
ChangeLog
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue