class DontStallMyProcess::Local::ChildProcessPool

Constants

MAX_ALLOC_TRIES
SEMAPHORE

Public Class Methods

alloc() click to toggle source
# File lib/dont-stall-my-process/local/child_process_pool.rb, line 7
def self.alloc
  process = nil
  tries   = MAX_ALLOC_TRIES
  until (process && process.alive?) || tries == 0
    tries -= 1
    SEMAPHORE.synchronize do
      if !@pool || @pool.empty?
        process = ChildProcess.new
      else
        process = @pool.shift
      end
    end
  end

  unless process && process.alive?
    fail SubprocessInitializationFailed, "failed to allocated subprocess (tried #{MAX_ALLOC_TRIES} times)"
  end

  process
end
each(&block) click to toggle source
# File lib/dont-stall-my-process/local/child_process_pool.rb, line 47
def self.each(&block)
  @pool.each(&block) if @pool
end
free(process) click to toggle source
# File lib/dont-stall-my-process/local/child_process_pool.rb, line 28
def self.free(process)
  # We do not want killed processes to enter the pool again.
  return unless process.alive?

  terminate = true

  if Configuration.process_pool_size && Configuration.process_pool_size > 0
    SEMAPHORE.synchronize do
      @pool ||= []
      if @pool.size < Configuration.process_pool_size
        @pool << process
        terminate = false
      end
    end
  end

  process.quit if terminate
end