Methods
B
N
W
Included Modules
Class Public methods
new(instances, socket_path)
# File rails/railties/lib/commands/ncgi/tracker, line 13
def initialize(instances, socket_path)
  @instances = instances
  @socket = File.expand_path(socket_path)
  @active = false

  @listeners = []
  @instances.times { @listeners << Mutex.new }

  message "using #{@listeners.length} listeners"
  message "opening socket at #{@socket}"

  @service = DRb.start_service("drbunix://#{@socket}", self)
end
Instance Public methods
background(check_interval = nil)
# File rails/railties/lib/commands/ncgi/tracker, line 53
def background(check_interval = nil)
  if check_interval
    loop do
      sleep check_interval
      message "Idle for #{check_interval}, shutting down" unless @active
      @active = false
      Kernel.exit 0
    end
  else DRb.thread.join
  end
end
with_listener()
# File rails/railties/lib/commands/ncgi/tracker, line 27
def with_listener
  message "listener requested"

  mutex = has_lock = index = nil
  3.times do 
    @listeners.each_with_index do |mutex, index|
      has_lock = mutex.try_lock
      break if has_lock
    end
    break if has_lock
    sleep 0.05
  end

  if has_lock
    message "obtained listener #{index}"
    @active = true
    begin yield index
    ensure
      mutex.unlock
      message "released listener #{index}"
    end
  else
    message "dropping request because no listeners are available!"
  end
end