Sha256: cc37f569f3479154e4891f7448e26e3f11acc76ac36115609aecfc334064a72c

Contents?: true

Size: 1.14 KB

Versions: 4

Compression:

Stored size: 1.14 KB

Contents

module Rake ; end
module Rake::CompTree
  module RetriableFork
    HAVE_FORK = lambda {
      begin
        process_id = fork { }
        Process.wait(process_id)
      rescue NotImplementedError
        return false
      end
      true
    }.call

    def fork(retry_wait = 10, retry_max = 10, &block)
      num_retries = 0
      begin
        Process.fork(&block)
      rescue Errno::EAGAIN
        num_retries += 1
        if num_retries == retry_max
          message = %Q{
            ****************************************************************
            Maximum number of EAGAIN signals reached (#{retry_max})
            ****************************************************************

            Either increase your process limit permission (consult your
            OS manual) or run this script as superuser.
  
            ****************************************************************
          }
          STDERR.puts(message.gsub(%r!^[ \t]+!, ""))
          raise
        end
        STDERR.puts "Caught EGAIN. Retrying in #{retry_wait} seconds."
        sleep(retry_wait)
        retry
      end
    end
    module_function :fork
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
drake-0.8.2.1.0.9 lib/rake/comp_tree/retriable_fork.rb
drake-0.8.2.1.0.10 lib/rake/comp_tree/retriable_fork.rb
drake-0.8.2.1.0.6 lib/rake/comp_tree/retriable_fork.rb
drake-0.8.2.1.0.7 lib/rake/comp_tree/retriable_fork.rb