X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/928394cd12eb75c35eac72952b29e4dc9e75d154..9495122b1853a97b3f15f0ddbf69d69698f9c82b:/client-libraries/ruby/lib/better_timeout.rb diff --git a/client-libraries/ruby/lib/better_timeout.rb b/client-libraries/ruby/lib/better_timeout.rb deleted file mode 100644 index 818909a8..00000000 --- a/client-libraries/ruby/lib/better_timeout.rb +++ /dev/null @@ -1,191 +0,0 @@ -#-- -# = timeout.rb -# -# execution timeout -# -# = Copyright -# -# Copyright - (C) 2008 Evan Phoenix -# 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... -# } -# - -require 'thread' - -module Timeout - - ## - # Raised by Timeout#timeout when the block times out. - - class Error b.left } - end - - slept_for = sleep(min.left) - - @mutex.synchronize do - @requests.delete_if do |r| - if r.elapsed(slept_for) - r.cancel - true - else - false - end - end - end - - end - end - - req = TimeoutRequest.new(time, Thread.current, exc) - - @mutex.synchronize do - @requests << req - end - - @controller.run - - return req - 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? - raise ThreadError, "timeout within critical session" if Thread.critical - - req = Timeout.add_timeout sec, exception - - begin - yield sec - ensure - req.abort - 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: - Timeout::timeout(n, e, &block) -end - -## -# Another name for Timeout::Error, defined for backwards compatibility with -# earlier versions of timeout.rb. - -class Object - remove_const(:TimeoutError) if const_defined?(:TimeoutError) -end -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 -