Module TimeoutEx
In: lib/timeout_ex.rb

Methods

timeout  

Classes and Modules

Class TimeoutEx::Error

Public Instance methods

[Source]

# File lib/timeout_ex.rb, line 17
  def timeout(sec, exception=Error, mutex=nil, &block)
    if sec > 0
      thread = Thread.new(mutex) do |mutex|
        Thread.current[:timeout_mutex] = mutex
        block[]
      end
      sleep(sec)
      if thread.alive?
        unless mutex.nil?
          mutex.synchronize { thread.kill if thread.alive? }
        else
          thread.kill
        end
        raise(exception, 'execution expired')
      end
    else
      block[]
    end
    true
  end

[Validate]